Apache VirtualHost and localhost

I'm working with XAMPP on Mac OS X.

I'm trying to run a Symfony website properly for a client, and I really don't know Symfony (yet). I just want to install and launch it.

I've changed my /etc/hosts file this way:

127.0.0.1 www.mysite.local

And the httpd.conf file this way:

<VirtualHost *:80>
ServerName www.mysite.local
DocumentRoot /Applications/MAMP/htdocs/mysite/web
DirectoryIndex index.php
<Directory /Applications/MAMP/htdocs/mysite/web>
AllowOverride All
Allow from All
</Directory>
Alias /sf /Applications/MAMP/htdocs/mysite/lib/vendor/symfony/data/web/sf
<Directory "/Applications/MAMP/htdocs/mysite/lib/vendor/symfony/data/web/sf">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>

Now, the site is working (yay!), but I can't access any more any of my other local sites because localhost is rendered as www.mysite.local.

Where am I wrong?

168825 次浏览

根据这份文件: 基于名称的虚拟主机支持

你可能忽略了以下指示:

NameVirtualHost *:80

如果您看到它,这是正常的。因为它是第一个虚拟主机条目,它将显示本地主机。

举个例子,你不想显示那个页面。您想要显示的只是“ Apache,it works”页面,因此您将在 mysite.local 作为本地主机之前创建一个 Vhost条目,并将其指向“ it works”页面。

但这很正常,我以前也遇到过这种问题,所以别担心!

localhost will always redirect to 127.0.0.1. You can trick this by naming your other VirtualHost to other local loop-back address, such as 127.0.0.2. Make sure you also change the corresponding hosts file to implement this.

例如,我的 httpd-vhosts.conf是这样的:

<VirtualHost 127.0.0.2:80>
DocumentRoot "D:/6. App Data/XAMPP Shared/htdocs/intranet"
ServerName intranet.dev
ServerAlias www.intranet.dev
ErrorLog "logs/intranet.dev-error.log"
CustomLog "logs/intranet.dec-access.log" combined


<Directory "D:/6. App Data/XAMPP Shared/htdocs/intranet">
Options Indexes FollowSymLinks ExecCGI Includes
Order allow,deny
Allow from all
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

(请注意,在 <VirtualHost>部分中,我键入了 127.0.0.2:80。这意味着 VirtualHost 的这个块只会影响到对 IP 地址 127.0.0.2端口 80的请求,80是 HTTP 的默认端口。

为了正确地路由名称 intranet.dev,我的 hosts条目行如下:

127.0.0.2 intranet.dev

这样,它将阻止您为 localhost创建另一个 VirtualHost 块,这是不必要的。

你可能想用这个:

<VirtualHost *:80>
DocumentRoot "somepath\Apache2.2\htdocs"
ServerName localhost
</VirtualHost>
<VirtualHost *:80>

作为您的第一个虚拟主机(将其放在其他虚拟主机之前)。

这招对我管用!

运行像 http://localhost/projectName这样的项目:

<VirtualHost localhost:80>
ServerAdmin localhost
DocumentRoot path/to/htdocs/
ServerName localhost
</VirtualHost>

在本地运行像 http://somewebsite.com这样的项目:

<VirtualHost somewebsite.com:80>
ServerAdmin webmaster@example.com
DocumentRoot /path/to/htdocs/somewebsiteFolder
ServerName www.somewebsite.com
ServerAlias somewebsite.com
</VirtualHost>

其他网站也是如此:

<VirtualHost anothersite.local:80>
ServerAdmin webmaster@example.com
DocumentRoot /path/to/htdocs/anotherSiteFolder
ServerName www.anothersite.local
ServerAlias anothersite.com
</VirtualHost>

对于一个做了这里描述的所有事情仍然无法访问的人来说:

XAMPP with Apache 2.4:

档案 httpd-vhost.conf:

<VirtualHost *>
DocumentRoot "D:/xampp/htdocs/dir"
ServerName something.dev
<Directory "D:/xampp/htdocs/dir">
Require all granted #apache v 2.4.4 uses just this
</Directory>
</VirtualHost>

这里不需要端口或 IP 地址。Apache 将其配置到自己的文件中。不需要 NameVirtualHost * : 80; 它已被弃用。你可以使用它,但它没有任何区别。

然后,要编辑主机,必须使用 run Notepad as administrator(如下所述)。如果您在编辑文件时没有这样做,那么您编辑的是一个伪文件,而不是原始文件(是的,它保存了,等等,但它不是真正的文件)

在 Windows 中:

找到记事本图标,右键单击,作为管理员运行,打开文件,转到 C:/WINDOWS/system32/Driver/etc/hosts,选中 “查看所有文件”,然后打开主机。

如果您以前编辑过它,那么您可能会发现它不是您以前在不以管理员身份运行时编辑的文件。

然后到 检查 Apache 是否正在读取 httpd-vhost. conf,转到文件夹 xampFolder/apache/bin,右键单击 Shift + ,在这里打开终端命令,打开 XAMPP (像通常那样) ,启动 Apache,然后在命令行上键入 httpd -S。您将看到虚拟主机的列表。检查一下你的 什么东西 Dev是否在那里。

这可能是因为你的 web 文件夹(如前面提到的“/Applications/MAMP/htdocs/mysite/”)是空的。

我的建议是,首先制作您的项目,然后致力于制作虚拟主机。

我也遇到过类似的情况。我在 Httpd-vhosts. confizDocumentRoot中使用了一个空文件夹,我无法访问我的 Shahg101.com站点。

I had the same issue of accessing localhost while working with virtualHost. I resolved it by adding the name in the virtualHost listen code like below:

在我的 接待员文件中,我添加了以下代码(C: WindowsSystem32驱动程序等主机)-

127.0.0.1   main_live

在我的 httpd.conf中,我添加了以下代码:

<VirtualHost main_live:80>
DocumentRoot H:/wamp/www/raj/main_live/
ServerName main_live
</VirtualHost>

That's it. It works, and I can use both 本地主机, Phpmyadmin, as well as 现场直播 (my virtual project) simultaneously.

我正在运行 Ubuntu 16.04(Xenial Xerus)。这对我来说很有效:

  1. Open up a terminal and CD to /etc/apache2/sites-available. There you will find a file called 000-default.conf.
  2. Copy that file: cp 000-default.conf example.local.conf
  3. 打开新文件(我使用 纳诺; 使用您熟悉的内容)。
  4. You will see a lot of commented lines, which you can delete.
  5. <VirtualHost *:80>改为 <VirtualHost example.local:80>
  6. Change the document root to reflect the location of your files.
  7. 添加以下一行: ServerName example.local如果需要,添加以下一行: ServerAlias www.example.local
  8. 保存文件并重新启动 Apache: service Apache2 restart

打开浏览器并导航到 example.local。您应该可以看到您的网站。

附加说明为 约翰 · 史密斯的回答 来自官方文件。了解为什么是。

Main host goes away

如果要将虚拟主机 添加到现有的 Web 服务器,则必须 也是 为现有主机创建一个块 此虚拟主机中包含的 ServerName 和 DocumentRoot 应该是 与全局 ServerName 和 DocumentRoot 相同 主机,因此它将作为 默认主机。

例如,要正确使用 XAMPP,为了防止 VirtualHost 重写主主机,请在文件 Httpd-vhosts. conf中添加以下代码行:

# Main host
<VirtualHost *:80>
ServerName localhost
DocumentRoot "/xampp/htdocs"
</VirtualHost>


# Additional host
<VirtualHost *:80>
# Over directives there
</VirtualHost>

<VirtualHost *:80>改成 <VirtualHost 127.0.0.1:80>

然后,默认的 DocumentRoot将服务于所有域或 IP 地址,指向您的服务器和指定的 VirtualHost将工作。

对于任何使用 Windows 和 Bitnami WAMP堆栈管理器工具的人来说,这个虚拟主机配置应该进入 Bitnami\apache2\conf\bitnami\bitnami.conf

注意: 目录部分中的一些设置不是必须的。

例如,我对 官网的虚拟主机配置如下:

<VirtualHost site.com:80>
DocumentRoot "C:/Bitnami/apache2/htdocs/site/docroot"


<Directory "C:/Bitnami/apache2/htdocs/site/docroot">
Options Indexes FollowSymLinks
AllowOverride All
<IfVersion < 2.3 >
Order allow,deny
Allow from all
</IfVersion>
<IfVersion >= 2.3 >
Require all granted
</IfVersion>
</Directory>
</VirtualHost>

记住其他朋友提到的 vhost 的配置,Sagits 的回答是必需的。