【问题标题】:htaccess rewriterule, [R,L=301] flags does not stop it. Why?htaccess rewriterule, [R,L=301] flags 不会阻止它。为什么?
【发布时间】:2012-02-26 03:06:58
【问题描述】:

.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 执行?如何停止为管理文件夹后面的 url 执行 .htaccess 文件的其余部分?我的代码有什么问题? 谢谢。

【问题讨论】:

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


    【解决方案1】:

    这几天我遇到了类似的问题,我在 PHP 聊天中从用户 DaveRandom 那里得到了一个非常有趣的答案:

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

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

    【讨论】:

      【解决方案2】:

      将此行添加到您的 .htaccess 文件顶部:

      RewriteRule ^administration - [NC,L]
      

      【讨论】:

        【解决方案3】:

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

        改变这个:-

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

        到这里:-

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

        【讨论】:

        • 删除L 标志有时会导致问题。
        • 真的吗?我从来没有遇到过问题。什么情况下?
        • 您几乎总是希望将 [R] 与 [L] 结合使用(即,使用 [R,L]),因为 [R] 标志本身会将 thishost[:thisport] 添加到URI,但随后将其传递给规则集中的下一条规则,这通常会导致“请求中的 URI 无效”警告。 (httpd.apache.org/docs/current/rewrite/flags.html#flag_r)
        【解决方案4】:
        RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-21
          • 2019-08-09
          • 1970-01-01
          • 2011-12-23
          • 2012-08-22
          • 1970-01-01
          • 2016-04-06
          相关资源
          最近更新 更多