我在 Debian 测试中全新安装了 Apache2,并在如下目录中配置了虚拟主机:
<Directory "/path/to/project">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
但是当我访问它时,它显示 403 Forbidden 错误,并且错误日志显示:
[Mon Sep 23 22:07:57.249276 2013] [authz_core:debug] [pid 8599] mod_authz_core.c(802): [client 127.0.0.1:49057] AH01626: authorization result of Require all denied: denied
[Mon Sep 23 22:07:57.249349 2013] [authz_core:debug] [pid 8599] mod_authz_core.c(802): [client 127.0.0.1:49057] AH01626: authorization result of <RequireAny>: denied
[Mon Sep 23 22:07:57.249361 2013] [authz_core:error] [pid 8599] [client 127.0.0.1:49057] AH01630: client denied by server configuration: /path/to/project/some_file
为什么显示“要求全部拒绝的结果:拒绝”如果我使用“要求全部授予”?
这些文件可供任何用户读取,以防万一我尝试将所有者更改为 Apache (www-data),但没有成功。此外,默认主机http://localhost
正常运行,phpmyadminhttp://localhost/phpmyadmin
也正常运行。
我在网上找到的所有帮助都是关于用 Require 替换 Order 指令。我已经这样做了。现在可能是什么问题?
答案1
有两件事可以尝试:
1)运行apachectl -t
检查句法您的文件有效。
2)运行apachectl -S
以显示哪个文件正在解析。
例如,您可能正在编辑 /usr/local/etc/apache2/2.4/httpd.conf,对吗?...但是如果您运行 apachectl -S,您可能会看到:
VirtualHost configuration:
*:80 localhost (/private/etc/apache2/extra/httpd-vhosts.conf:23)
即虚拟主机将覆盖您的 httpd.conf,并且可能包含其自己的Require all denied
或类似的内容。
答案2
您已设置授权,但未设置身份验证。因此,虽然“要求全部授予”将授予所有经过身份验证的用户访问权限,但您的用户实际上并未进行身份验证。
答案3
由于您正在使用AllowOverride All
指令,因此您可能还拥有一个.htaccess
文件/path/to/project/
。该文件可能包含一个覆盖的指令。
例如,还要检查 VHost 中是否没有其他参数。
答案4
这看起来真的很老了,但我今天经过 10 分钟的绝望才找到的。结果发现:Directory 和 DocumentRoot 不同(拼写错误)。也许这会为其他人节省一些时间 :)