在 Apache 中启用虚拟主机会禁止所有主机 (403)
Enabling virtual hosts in Apache makes every host forbidden (403)
我在 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>
还编辑了主机文件并添加了必要的行。
127.0.0.1 project1
127.0.0.1 p1
问题是我不仅在访问 project1/
和 p1/
时遇到 403 Forbidden
错误,而且在访问 localhost/
.
时也遇到错误
当我通过注释掉 httpd.conf 中的 httpd-vhosts.conf 时,
Include conf/extra/httpd-vhosts.conf
我可以访问 localhost/
,但正如预期的那样,project1/
和 p1/
也解决了 localhost/
。
令人惊讶的是,当我在 httpd.conf
中重新启用 httpd-vhosts.conf
并恢复原始(未更改)httpd-vhosts.conf
的备份时,我仍然得到 403 (Forbidden)
即使在 localhost/
。但是当我再次禁用 httpd-vhosts.conf
时,localhost/
恢复正常。
更令人惊讶的是,如果我将 DocumentRoot
更改为 c:/wamp/www
中的虚拟文件夹,情况是一样的。所以这不仅发生在 DocumentRoot
在 c:/wamp/www
之外时。
我觉得我有一些额外的东西要启用,因为我不可能搞砸任何东西,因为这是一个全新的安装,除了上面的那些我没有做任何改变。
Apache 无法与虚拟主机相处的原因可能是什么?
有些事情您没有考虑到。
创建虚拟主机时,Apache 会忽略 httpd.conf 中定义的主机,因此您还需要为 localhost
创建虚拟主机。这解释了为什么在激活虚拟主机后无法到达 localhost
。
Apache 支持 IPV4 和 IPV6,因此当您在 HOSTS 文件中创建域名时,您需要对 IPV4 和 IPV6 堆栈都这样做。所以你需要有一个像这样的主机文件:-
#IPV4 Stack
127.0.0.1 localhost
127.0.0.1 project1
#IPV6 Stack
::1 localhost
::1 project1
浏览器会任意决定是使用 IPV4 堆栈还是 IPV6 堆栈。希望我明白为什么以及出于什么原因它使这个决定更好,但基本上当你输入域名、浏览器或网络堆栈时,选择 IPv4 或 IPv6 作为你第一次接触域然后坚持那个决定,但它两者都可以。
这是 post should help you create Virtual Hosts
我在 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>
还编辑了主机文件并添加了必要的行。
127.0.0.1 project1
127.0.0.1 p1
问题是我不仅在访问 project1/
和 p1/
时遇到 403 Forbidden
错误,而且在访问 localhost/
.
当我通过注释掉 httpd.conf 中的 httpd-vhosts.conf 时,
Include conf/extra/httpd-vhosts.conf
我可以访问 localhost/
,但正如预期的那样,project1/
和 p1/
也解决了 localhost/
。
令人惊讶的是,当我在 httpd.conf
中重新启用 httpd-vhosts.conf
并恢复原始(未更改)httpd-vhosts.conf
的备份时,我仍然得到 403 (Forbidden)
即使在 localhost/
。但是当我再次禁用 httpd-vhosts.conf
时,localhost/
恢复正常。
更令人惊讶的是,如果我将 DocumentRoot
更改为 c:/wamp/www
中的虚拟文件夹,情况是一样的。所以这不仅发生在 DocumentRoot
在 c:/wamp/www
之外时。
我觉得我有一些额外的东西要启用,因为我不可能搞砸任何东西,因为这是一个全新的安装,除了上面的那些我没有做任何改变。
Apache 无法与虚拟主机相处的原因可能是什么?
有些事情您没有考虑到。
创建虚拟主机时,Apache 会忽略 httpd.conf 中定义的主机,因此您还需要为 localhost
创建虚拟主机。这解释了为什么在激活虚拟主机后无法到达 localhost
。
Apache 支持 IPV4 和 IPV6,因此当您在 HOSTS 文件中创建域名时,您需要对 IPV4 和 IPV6 堆栈都这样做。所以你需要有一个像这样的主机文件:-
#IPV4 Stack
127.0.0.1 localhost
127.0.0.1 project1
#IPV6 Stack
::1 localhost
::1 project1
浏览器会任意决定是使用 IPV4 堆栈还是 IPV6 堆栈。希望我明白为什么以及出于什么原因它使这个决定更好,但基本上当你输入域名、浏览器或网络堆栈时,选择 IPv4 或 IPv6 作为你第一次接触域然后坚持那个决定,但它两者都可以。
这是 post should help you create Virtual Hosts