Apache RewriteEngine开启导致403错误

问题描述 投票:9回答:4

我有一个运行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 的指令,但这并不能解决问题。

我按照 这个 一切似乎都很顺利。

linux apache .htaccess mod-rewrite centos6
4个回答
2
投票

自从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。


1
投票

你应该从htaccess中删除这一行。

Options +FollowSymLinks

你在apache vhost文件中已经有了。另外,如果你要开启mod_rewrite的话,是否应该添加一个规则,否则就没有必要开启了。


1
投票

当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 

0
投票

阿帕奇2.4的另一个可能性是由 Options -FollowSymlinks 也会抛出一个403错误并生成以下日志。

AH00670.选项FollowSymLinks和SymLinksIfOwnerMatch都是关闭的。选项FollowSymLinks和SymLinksIfOwnerMatch都是关闭的,所以RewriteRule指令也是被禁止的,因为它同样能够规避目录限制。

原文中没有这种情况,但如果出现这种情况,你需要使用这一行重新启用FollowSymLinks。

Options +FollowSymLinks

© www.soinside.com 2019 - 2024. All rights reserved.