我有一个运行Centos 6.6和Apaches 2.2.x的Linux盒子,由于一些未知的原因,打开重写引擎会导致403错误(无论我是否添加重写规则都会发生)。
我花了好几个小时研究这个问题,并根据我在很多地方找到的建议修改了我的配置,但仍然没有任何结果。
目前在我的.htaccess中,我有这样的内容。
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
</IfModule>
在虚拟主机的指令中,我有这个。
DocumentRoot /var/www/html/example.uk
<Directory /var/www/html/example.uk>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ServerName example.uk
ServerAlias www.example.uk
(这在Debian盒子里似乎是可行的,但在我的Centos机器里就不行了。)
在我的 httpd.conf 中,我把
AllowOverride 无
到
允许覆盖所有
我的httpd.conf还包含LoadModule rewrite_module modules/mod_rewrite.so
错误日志说。
选项FollowSymLinks或SymLinksIfOwnerMatch是关闭的,这意味着RewriteRule指令是被禁止的:varwwwhtmlexample.uk。
现在,我之前已经添加了 SymLinksIfOwnerMatch 的指令,但这并不能解决问题。
我按照 这个 一切似乎都很顺利。
自从apache版本>=2.4指令后,我就一直在想,为什么会出现这种情况?
Order allow,deny
allow from all
导致全局403,为了确保这一点,如果你检查你是apache的日志。
[Tue May 05 11:54:32.471679 2015] [authz_core:error] [pid 9497] [client 127.0.0.1:35908] AH01630: client denied by server configuration: pathtoweb
评论指令 Order
并加 Require all granted
如bellow。
Require all granted
#Order allow,deny
#allow from all
希望能帮到你
编辑:
来自apache的解释这种行为是由新模块提供的 mod_authz_host
对于可用的限制列表(ip、主机等)。http:/httpd.apache.orgdocs2.4enmodmod_authz_host.html。
你应该从htaccess中删除这一行。
Options +FollowSymLinks
你在apache vhost文件中已经有了。另外,如果你要开启mod_rewrite的话,是否应该添加一个规则,否则就没有必要开启了。
当Apache没有执行权限的时候,就会发生这种情况。
/var
/var/www
/var/www/html
/var/www/html/example.uk
运行。
chmod o+x /var /var/www /var/www/html /var/www/html/example.uk
阿帕奇2.4的另一个可能性是由 Options -FollowSymlinks
也会抛出一个403错误并生成以下日志。
AH00670.选项FollowSymLinks和SymLinksIfOwnerMatch都是关闭的。选项FollowSymLinks和SymLinksIfOwnerMatch都是关闭的,所以RewriteRule指令也是被禁止的,因为它同样能够规避目录限制。
原文中没有这种情况,但如果出现这种情况,你需要使用这一行重新启用FollowSymLinks。
Options +FollowSymLinks