【问题标题】:Redirect loop occuring while removing/adding trailing Slash from URL从 URL 中删除/添加尾部斜杠时发生重定向循环
【发布时间】:2012-12-13 16:33:04
【问题描述】:

在专门为特定 URL 编写重写规则以从中删除尾部斜杠时,会发生无限重定向循环。

以下是我尝试在 .htaccess 中编写的代码:

RewriteRule ^abc.php /abc/ [R=301,L,NC,QSA]
RewriteRule ^abc/ abc.php [NC,QSA]

我正在尝试将 abc.php 上的 301 重定向到 abc/,但只想为 abc/ 提供 abc.php 的内容。只想专门为这个 url 写一个规则。

【问题讨论】:

  • 如果我没听错的话,您想在特定情况下从 URL 中隐藏 .php,不是吗?
  • 是的,但我也想将 301 重定向到 abc/ 并希望仅将此规则应用于 abc.php
  • 把规则的顺序倒过来怎么样?如 RewriteRule ^abc/ abc.php [NC,L,QSA] 之前的 RewriteRule ^abc.php /abc/ [R=301,L,NC,QSA] 。由于所需的 URL 是 /abc/ 并且从上到下读取规则
  • 它不起作用..不会改变发生的流程
  • 无论如何,这是我尝试过的,我认为它已在我的机器上修复了它,但让我知道它是怎么回事!基本上我将? 添加到^abc/ 中的/ 成为RewriteRule ^abc/? abc.php [NC,QSA]

标签: php .htaccess mod-rewrite http-status-code-301


【解决方案1】:

如果您检查由浏览器使用RewriteCond 发送到服务器的 HTTP 请求行(请参阅 herehere),并且此外,您可以反转无限循环的顺序规则:

RewriteRule ^abc/ abc.php [L,QSA]
RewriteCond %{THE_REQUEST} ^GET\ /abc\.php
RewriteRule ^abc.php$ /abc/ [R=301, QSA]

【讨论】:

  • 我可以在这些 URL 上同时收到 GET 和 POST 请求,因此可能会成为问题。
  • 您不能为 POST 案例添加一个新条件并将这两个条件与 [OR] 标志结合起来吗?
【解决方案2】:

试试这个:

重写引擎开启 重写规则 ^abc/? abc.php [NC,L,QSA] 重写规则 ^abc.php /abc/ [R=301,QSA]

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2014-06-21
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 2014-06-19
    相关资源
    最近更新 更多