Apache VirtualHost和localhost

我正在使用Mac OS X上的XAMPP。我正在尝试为客户端正确运行一个symfony网站,我真的不知道(还)symfony,我只想安装并启动它。

我改变了我的etc / hosts这种方式:

127.0.0.1 www.mysite.local 

和httpd.conf这样:

 <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> 

现在,该网站正在工作(耶!),但我不能再访问我的其他本地网站,因为本地主机呈现为www.mysite.local 。 我哪里错了?

谢谢!

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

比方说,例如,你不希望该页面显示。 所有你想要显示的是Apache的工作页面,所以你可以在本地主机mysite.local之前创build一个虚拟主机条目,并将其指向它的工作页面。

但这是正常的。 之前我有这个问题,所以不用担心!

这对我有用!

运行像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> 

localhost将始终redirect到127.0.0.1 。 您可以通过将其他VirtualHost命名为其他本地环回地址(如127.0.0.2来欺骗它。 确保你也改变相应的hosts文件来实现这个。

例如,我的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>部分我input127.0.0.2:80 ,这意味着VirtualHost的这个块只会影响请求到IP地址127.0.0.2端口80 ,这是HTTP的默认端口。

为了正确地路由名字intranet.dev ,我的hosts入口行如下所示:

 127.0.0.2 intranet.dev 

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

你可能想用这个:

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

作为你的第一个虚拟主机(把它放在另一个虚拟主机之前)

对于在这里描述的所有事物,仍然无法访问:
XAMPP与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,Apacheconfiguration它自己的文件。 不需要NameVirtualHost *:80,它的弃用,你可以使用它,但没有什么区别。

然后编辑主机, 你必须运行记事本作为pipe理员(描述的贝洛),如果你在哪里编辑文件而不这样做,你正在编辑一个伪文件,而不是原来的(是的,它保存和狗屎,但它不是真正的文件)
在Windows中:

find记事本图标,右键单击,以pipe理员身份运行,打开文件,进入c:/ windows / system32 / driver / etc / hosts,选中“查看所有文件”,打开主机。

如果你在之前编辑它,可能你会看到它不是以pipe理员身份运行时以前编辑的文件。

然后检查Apache是​​否正在读取你的httpd-vhost.conf ,进入xampFolder / apache / bin,点击右键,打开terminal命令,打开xampp(像平时一样),启动apache,然后在命令行中,键入httpd -S,你会看到一个虚拟主机的列表,只是检查你的something.dev是否在那里。

在使用virtualHost时,我也遇到了访问本地主机的问题。 我解决了在虚拟主机中添加名称如下所示的侦听代码 –

在我的hosts文件中,我添加了下面的代码( C:\ Windows \ System32 \ drivers \ etc \ hosts ) –

 127.0.0.1 main_live 

并在我的httpd.conf中添加了以下代码 –

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

而已。 它的工作原理,我可以同时使用localhostphpmyadmin ,以及main_live (我的虚拟项目)。

约翰·史密斯官方文档的附加说明。 理解为什么是这样。

主人走开

如果要将虚拟主机添加到现有Web服务器,则还必须为现有主机创build一个块 。 此虚拟主机中包含的ServerName和DocumentRoot应与全局ServerName和DocumentRoot相同。 首先在configuration文件中列出这个虚拟主机,以便它作为默认主机。

例如,要正确使用XAMPP,为了防止VirtualHost覆盖主要主机,请将跟随行添加到httpd-vhosts.conf

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

根据此文档: 基于名称的虚拟主机支持

您可能会错过以下指令:

 NameVirtualHost *:80 

只需将<VirtualHost *:80>更改为<VirtualHost 127.0.0.1:80>

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

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

我的build议是首先让你的项目,然后制作虚拟主机。 我也遇到了类似的情况。 我在httpd-vhosts.confiz中的DocumentRoot中使用了一个空文件夹,我不能访问我的shahg101.com站点

我正在运行Ubuntu 16.04,这是对我来说是什么工作:

  1. 打开terminal并cd到/etc/apache2/sites-available 。 在那里你会find一个名为000-default.conf的文件。
  2. 复制该文件: cp 000-default.conf example.local.conf
  3. 打开这个新文件(我使用Nano;使用你所熟悉的)。
  4. 你会看到很多注释行,你可以删除。
  5. <VirtualHost *:80>更改为<VirtualHost example.local:80>
  6. 更改文档根目录以反映文件的位置。
  7. 添加以下行: ServerName example.local如果需要,请添加以下行: ServerAlias www.example.local
  8. 保存文件并重新启动Apache: service Apache2 restart

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