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>
而已。 它的工作原理,我可以同时使用localhost , phpmyadmin ,以及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,这是对我来说是什么工作:
- 打开terminal并cd到
/etc/apache2/sites-available
。 在那里你会find一个名为000-default.conf
的文件。 - 复制该文件:
cp 000-default.conf example.local.conf
- 打开这个新文件(我使用Nano;使用你所熟悉的)。
- 你会看到很多注释行,你可以删除。
- 将
<VirtualHost *:80>
更改为<VirtualHost example.local:80>
- 更改文档根目录以反映文件的位置。
- 添加以下行:
ServerName example.local
如果需要,请添加以下行:ServerAlias www.example.local
- 保存文件并重新启动Apache:
service Apache2 restart
打开浏览器并导航到example.local
。 你应该看到你的网站。