【问题标题】:RewriteEngine producing recursion, altough NS (nosubreq) is specified - Why?RewriteEngine 产生递归,尽管指定了 NS (nosubreq) - 为什么?
【发布时间】:2011-10-11 11:24:45
【问题描述】:

我有这个重写:

RewriteRule ^authenticate   /id/authenticate.php [NS,QSA]

我收到此错误:

[2011 年 7 月 23 日星期六 05:12:37] [错误] [客户端 62.178.15.161] 请求 由于可能,超出了 10 个内部重定向的限制 配置错误。使用“LimitInternalRecursion”来增加 必要时限制。使用“LogLevel debug”获取回溯。,referer: https://2x.to/id/authenticate

我认为 NS 标志应该可以防止这种情况发生。

它是否由于某种原因无法正常工作,是我没有正确应用它还是我误解了它的目的?

是否有另一种方法可以在不重命名文件的情况下使这个重写规则“工作”?

编辑:

我将 RewriteRule 修改为:

RewriteRule ^authenticate$  /id/authenticate.php [QSA]

效果很好。但是我仍然对为什么 NS 不起作用感兴趣。

【问题讨论】:

  • 如果您可以编辑 Apache 的配置文件,请启用重写调试 (RewriteLogLevel 9) 并检查重写日志以查看到底发生了什么。 [NS] 标志在这里肯定无济于事。这条规则本身不会产生重写循环——可能你还有其他规则,可能在/id/文件夹的htaccess中。

标签: apache http mod-rewrite url-rewriting


【解决方案1】:

您可能在这里需要[L],而不是[NS] -- [NS] 专门用于在Apache 向自身发出“内部”请求的一些不寻常情况下抑制重写,例如在处理服务器端包含时。

您可能还需要使规则更具体 - 根据此规则所在的位置,^authenticate 可能与 /id/authenticate.php 匹配。如果是这种情况,您需要添加一个较早的规则,该规则“排除”该文件的例外情况,如下所示:

RewriteRule ^/id/authenticate\.php$ - [L]

【讨论】:

  • 我也想到了 L 标志,但它没有效果。 +1 其余的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 2020-08-22
  • 2013-02-19
  • 2015-12-01
相关资源
最近更新 更多