htaccess rewriteRule到uri重复模式

时间:2014-01-07 21:46:19

标签: regex apache .htaccess mod-rewrite url-rewriting

如何将“www.mydomain.com/pattern/pattern/value”重定向到“www.mydomain.com/pattern/value”? 使用:

RewriteRule ^pattern/(.*) /$1 [l,r,qsa]

重定向至:www.mydomain.com/value,错过了模式目录。

2 个答案:

答案 0 :(得分:0)

这是因为规则由于这种模式而执行了两次:^pattern/(.*)

  1. 匹配/pattern/pattern/value并重定向到/pattern/value
  2. 它再次匹配/pattern/value并重定向到/value
  3. 用以下内容替换您的规则:

    RewriteCond %{QUERY_STRING} ^$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^[^/]+/(.+)$ /$1?r [L,R]
    

答案 1 :(得分:0)

感谢anubhava指出我正确的方向: 这是我的最终代码

RewriteRule ^search/(.*)            search.php?q=$1 [qsa]
RewriteRule ^search/images/(.*)     images/$1
RewriteRule ^search/css/(.*)        css/$1
RewriteRule ^search/search/(.*)     /search/$1?s [l,r]
RewriteCond %{HTTP_REFERER} search/(.*)
RewriteCond %{QUERY_STRINg} !^s$
RewriteRule ^search/(.*)            /$1 [l,r]

我只在双模式的情况下添加?s QUERY_STRING,以尽可能保持干净。 仅当链接来自包含查询结果的页面时,HTTP_REFERER才用于应用规则。