代码之家  ›  专栏  ›  技术社区  ›  Matt

如何关闭qsa?(追加查询字符串)

  •  4
  • Matt  · 技术社区  · 15 年前

    我正在使用apache2和mod_rewrite来隐藏我的查询字符串。这些是有问题的规则。

    RewriteCond %{QUERY_STRING}                 ^query=(.*)$
    RewriteRule (.*)                            /search/%1             [R=301,L]
    
    RewriteRule ^search\/?$                     /search/?query=test    [R=301,L]
    

    当我访问时 /search (或) /search/ )我被正确地重定向到 /search/?query=test (根据上一条规则)

    从那里, RewriteCond RewriteRule 应该踢进去把我转到 /search/test 对吧?据我所知 %1 在我的第一 改写词 对应于 (.*) 重写秒 应该包含 test .

    但是,实际发生的是我被重定向到 /search/test/?query=test . 所以,规则可以工作,但出于某种原因,查询字符串被附加了。 是否自动添加了qsa选项?

    然后我陷入了一个无限循环中 /search/test?query=test 因为第一个 重写秒 改写词 一次又一次的踢…

    我做错什么了?!

    谢谢!

    1 回复  |  直到 15 年前
        1
  •  11
  •   Gumbo    15 年前

    您需要指定 empty query in the substitution 要防止原始请求的查询附加到新的URL,请执行以下操作:

    修改查询字符串

    默认情况下,查询字符串是通过未更改的方式传递的。但是,您可以在包含查询字符串部分的替换字符串中创建URL。只需在替换字符串中使用问号来指示以下文本应重新注入到查询字符串中。当您想要删除一个现有的查询字符串时,只需在替换字符串的末尾加上一个问号。要组合新查询字符串和旧查询字符串,请使用[qsa]标志。

    所以:

    RewriteCond %{QUERY_STRING} ^query=(.*)$
    RewriteRule (.*) /search/%1? [R=301,L]
    
    推荐文章