在Apache中启用虚拟主机会禁止每个主机(403)

时间:2015-05-30 08:03:29

标签: virtualhost wampserver apache2.4

我在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 Forbiddenproject1/时,以及访问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与虚拟主机相处的原因可能是什么?

1 个答案:

答案 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,然后坚持这个决定,但它可以使用。

以下是should help you create Virtual Hosts

的帖子