1

我在我的网站上的 .htaccess 中有以下代码,可将所有请求重写为 .https

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

这通常工作得很好。现在解决问题。如果我提交一个垃圾 url,比如 domain.com/../../../../etc/psswd,modsecurity 会做它的事情并发出 403 错误代码。同样在同一个 .htaccess 中,我有几个 ErrorDocument 指令,包括一个用于 403 的指令。但问题是,特别是当我使用 iPad 或 iPhone 但我的笔记本电脑有时也会这样做时,浏览器会显示(对于上面的垃圾 url )、一个 403 错误和一个附加声明,即在尝试使用 ErrorDocument 时出现 500 错误。

apache error_log 提供以下错误:“由于可能的配置错误,请求超出了 10 个内部重定向的限制。”

如果我在 .htaccess 中注释掉上述两个 RewriteRules,问题就会消失,但我不会重定向到 https。令人沮丧的是,这似乎并不总是发生。我相信这种情况正在发生,因为我对 https 的两次重写在递归循环中捕获了这些垃圾 url,我只是不知道如何修复它并维护我对 https 的重写。

4

1 回答 1

0

让你的两条规则都像这样,还有一个附加条件:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

并确保这些规则位于所有其他规则之前。

指令触发后,新条件%{ENV:REDIRECT_STATUS} ^$将跳过这两条规则。ErrorDocument

于 2013-10-11T14:49:54.150 回答