RewriteEngine产生递归,虽然指定了NS(nosubreq) - 为什么?

时间:2011-07-23 01:15:09

标签: apache http mod-rewrite url-rewriting

我有这个改写:

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

我收到此错误:

  

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

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

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

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

编辑:

我将RewriteRule改编为:

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

效果很好。但是我仍然对NS无法工作的原因感兴趣。

1 个答案:

答案 0 :(得分:2)

你可能想要[L],而不是[NS] - [NS]专门用于在某些异常情况下抑制重写,其中Apache会向自己发出“内部”请求,比如处理服务器端包括。

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

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