Apache RewriteEngine On 导致 403 错误

Posted

技术标签:

【中文标题】Apache RewriteEngine On 导致 403 错误【英文标题】:Apache RewriteEngine On causes 403 error 【发布时间】:2015-07-01 02:17:58 【问题描述】:

我有一个运行 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 None

允许全部覆盖

我的 httpd.conf 还包含 LoadModule rewrite_module modules/mod_rewrite.so

错误日志说:

Options FollowSymLinks 或 SymLinksIfOwnerMatch 关闭,这意味着 RewriteRule 指令被禁止:/var/www/html/example.uk

现在,我之前在指令中添加了 SymLinksIfOwnerMatch,但并没有解决问题。

我关注了this,一切似乎都如愿以偿。

【问题讨论】:

您在哪个页面获得 403?你在那个位置有索引文件吗? @PanamaJack 根。那里有一个 index.php,如果我注释掉 RewriteEngine On,它会显示得很好 检查你的 apache 日志文件,看看它是什么错误,为什么你得到 403 @PanamaJack 我已将其添加到问题中 您可以访问您的日志吗?如果是这样,请检查它们并将单个请求的日志放在此处! 【参考方案1】:

你应该从 htaccess 中删除这一行

Options +FollowSymLinks

您已经在 apache vhost 文件中拥有它。另外,如果您要打开 mod_rewrite 或者没有必要打开它,您应该添加一条规则。

【讨论】:

你添加了重写规则吗? 添加了 RewriteCond %SERVER_PORT 80 RewriteRule ^(.*)$ https://example.uk/$1 [R,L] 仍然出现 403 错误 当你把它添加到 vhost 文件时你重启了 apache 吗? 是的,我重启了 apache 尝试在虚拟主机中将Indexes更改为-Indexes并重启。【参考方案2】:

当 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 

【讨论】:

我试过这个并重新启动了 apache。还是不行。 不行,还是有问题。 这实际上帮助了我。阿帕奇是所有者,但没有执行权。 chmod 到 /var/www/html 755 成功了【参考方案3】:

由于 apache 版本 >= 2.4 指令

Order allow,deny
allow from all

导致全局 403,如果您检查您是 apache 的日志,以确保这一点:

[2015 年 5 月 5 日星期二 11:54:32.471679] [authz_core:error] [pid 9497] [client 127.0.0.1:35908] AH01630:客户端被服务器配置拒绝:/path/to/web/

评论指令Order 并添加Require all granted,如下所示:

 Require all granted
 #Order allow,deny
 #allow from all

希望对您有所帮助。

编辑:

explanation from apache 此行为由新模块mod_authz_host提供

查看可用限制列表(ip、主机等)http://httpd.apache.org/docs/2.4/en/mod/mod_authz_host.html

【讨论】:

谢谢,但这导致了 500 错误。我想我将不得不忘记使用 .htaccess 并改用 PHP。【参考方案4】:

Apache 2.4 的另一种可能性是由Options -FollowSymlinks 引起的,它也会抛出 403 错误并生成以下日志:

AH00670:FollowSymLinks 和 SymLinksIfOwnerMatch 选项均已关闭, 所以 RewriteRule 指令也被禁止,因为它类似 规避目录限制的能力

原始帖子中不是这种情况,但如果出现这种情况,您需要使用此行重新启用 FollowSymLinks:

Options +FollowSymLinks

【讨论】:

感谢您的贡献。为了增加清晰度,并将您的帖子完善为完整的答案,我可以建议添加重新启用FollowSymLinks 所需的确切代码。这样,不熟悉该技术的用户可以应用您的建议,而无需先进行额外的研究以了解如何操作。完全独立的答案更有用,也更有可能被投票。只需在帖子末尾添加 1 行代码将是一个很好的补充。如果这是人们可能想要阅读的更多内容,那么总是欢迎添加源链接(如果有的话)。

以上是关于Apache RewriteEngine On 导致 403 错误的主要内容,如果未能解决你的问题,请参考以下文章

我的 Apache2 RewriteEngine On 和 AllowOverride All 更改是不是安全?

RewriteEngine on 给出错误 403

text 在RewriteEngine On之后,将此代码段添加到Joomla网站的.htaccess

mod_rewrite RewriteEngine On 不工作

APACHE RewriteEngine用途

通过修改apache配置文件https转换http