我在Windows 8上,刚刚在C:/wamp
安装了Wamp 2.5(Apache 2.4.9)以在本地测试我的代码。我有D:/workpace/project1
的源代码存储库,我使用GIT管理(GIT是我不想打扰其位置的原因之一)。
安装Wamp之后,我通过取消注释httpd.conf
中的以下行来继续启用虚拟主机。
#Include conf/extra/httpd-vhosts.conf
然后我前往conf/extra/httpd-vhosts.conf
创建了备份并创建了虚拟主机。
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot "D:/workspace/project1/"
ServerName project1
ServerAlias p1
ErrorLog "logs/project1(local)-error.log"
CustomLog "logs/project1(local)-access.log" common
<Directory "D:/workspace/project1/">
Require all granted
</Directory>
</VirtualHost>
还编辑了hosts文件并添加了必要的行。
127.0.0.1 project1
127.0.0.1 p1
问题在于,当我访问403 Forbidden
和project1/
时,以及访问p1/
时,我收到localhost/
错误。
当我通过注释掉
来禁用httpd.conf中的httpd-vhosts.conf时 Include conf/extra/httpd-vhosts.conf
我可以访问localhost/
,但正如预期的那样,project1/
和p1/
也决定localhost/
。
令人惊讶的是,当我在httpd-vhosts.conf
中重新启用httpd.conf
并恢复原始(未更改)httpd-vhosts.conf
的备份时,即使在403 (Forbidden)
上,我仍然会localhost/
}。但是,当我停用httpd-vhosts.conf
时,localhost/
恢复正常。
另外值得注意的是,如果我将DocumentRoot
更改为c:/wamp/www
内的虚拟文件夹,则故事是相同的。因此,当DocumentRoot
超出c:/wamp/www
时,就不会发生这种情况。
我觉得我有额外的东西可以启用,因为我没有机会搞砸任何东西,因为这是一个全新的装置,除了上面的那些之外我没有做任何改动。
Apache与虚拟主机相处的原因可能是什么?
答案 0 :(得分:2)
有些事情你没有考虑到。
创建虚拟主机时,Apache会忽略httpd.conf中定义的主机,因此您还需要为localhost
创建虚拟主机。这解释了为什么在激活虚拟主机时无法访问localhost
。
Apache识别IPV4和IPV6,因此当您在HOSTS文件中创建域名时,您需要为IPV4和IPV6堆栈执行此操作。所以你需要有一个像这样的HOSTS文件: -
#IPV4 Stack
127.0.0.1 localhost
127.0.0.1 project1
#IPV6 Stack
::1 localhost
::1 project1
浏览器会决定是使用IPV4堆栈还是使用IPV6堆栈。希望我理解为什么以及为什么它会使这个决定更好,但基本上当你输入域名,浏览器或网络堆栈时,为你的第一次接触域选择IPv4或IPv6,然后坚持这个决定,但它可以使用。
的帖子