【问题标题】:mod-rewrite infinite recursionmod-rewrite 无限递归
【发布时间】:2012-08-29 01:43:08
【问题描述】:

我在使用 apaches mod-rewrite 时遇到以下问题(这可能是一个简单的问题,但我就是不明白......)

我希望我的 URL 路径以两个字母部分(国家代码)开头,例如

http://www.example.com/se/

每当 URL 与此模式不匹配时,我希望我的 .htaccess 重定向到一个固定的起始地址,例如上面的 http://www.example.com/se/

我还需要重定向不以斜杠结尾的 URL(即 http://www.example.com/se 也应该被重定向...)

我在.htaccess 中添加了以下几行:

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !^/[a-z]{2}/
RewriteRule ^(.*)$ se/ [R,L]

但这会导致无限递归,因为请求http://www.example.com/se/ 也被重定向。我不明白,为什么在这种情况下RewriteCond 变为 true。

【问题讨论】:

    标签: apache mod-rewrite redirect


    【解决方案1】:

    您正在检查您的查询字符串(这是所有 URL 中 ? 之后的内容)是否不以 /[a-z]{2}/ 开头。在你的例子中,它没有。因此,在重定向之后,查询字符串 still 不会以此开头,因此您会再次被重定向到相同的 URL。然后一次又一次。

    我认为您正在寻找的是%{REQUEST_URI}

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} !^/[a-z]{2}/
    RewriteRule ^(.*)$ se/ [R,L]
    

    【讨论】:

      猜你喜欢
      • 2011-08-04
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 2010-12-26
      • 2011-07-20
      相关资源
      最近更新 更多