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 更改是不是安全?
text 在RewriteEngine On之后,将此代码段添加到Joomla网站的.htaccess