htaccess rewriterule,[R,L = 301]标志不会阻止它。为什么?

时间:2012-02-03 13:50:48

标签: .htaccess url mod-rewrite https url-rewriting

.htaccess的开头是

RewriteEngine On

#begin of rules for administration folder, redirect to https, if not https
RewriteCond %{REQUEST_URI} ^/administration
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R,L=301]
#end of rules for administration folder

#===no rules for /administration folder below this line===
#the rest part of .htaccess

为什么.htaccess的其余部分仍然适用于https://www.mydomain.com/administration/index.php?如何停止执行管理文件夹后面的网址的.htaccess文件的其余部分?我的代码有什么问题? 谢谢。

4 个答案:

答案 0 :(得分:3)

RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

答案 1 :(得分:1)

在.htaccess文件的顶部添加此行:

RewriteRule ^administration - [NC,L]

答案 2 :(得分:0)

这些天我有同样的问题,我在PHP聊天中得到了用户DaveRandom的一个非常有趣的答案:

“基本上,mod_rewrite有效地在一个循环中运行(这不是真的,但实际上就是这样),并且[L]标志就像PHP中的”continue“语句一样(它停止处理下面的规则)当前迭代,但它将从顶部开始再次处理规则。所以在你的规则中,第一次迭代匹配第一个规则,然后第二次迭代跳过第一个规则(它产生与输入相同的输出)和然后匹配第二条规则。“

可能的解决方案:“如果您使用[END]而不是[L]使用apache 2.4将是一个修复”。

答案 3 :(得分:-1)

这是因为你有语法错误。 .htaccess将忽略错误行

更改: -

RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R,L=301]

对此: -

RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301]