【问题标题】:htaccess 301 redirect - Remove query string (QSA)htaccess 301 重定向 - 删除查询字符串 (QSA)
【发布时间】:2014-02-02 19:20:14
【问题描述】:

我一直在为一些 htaccess 重定向而苦苦挣扎。我只是花了一些时间在堆栈上阅读和搜索,但找不到适用于我的场景的 anwser。

我正在将旧客户网站的 301 重定向到新网站。旧页面有我想从 url 中删除的参数查询。

/menu.php?idCategorie=29&idDetail=172

/new-website-page/

我有多个查询要做,这里有几个例子:

/menu.php?idCategorie=29&idDetail=172
/menu.php?idCategorie=29&idDetail=182
/menu.php?idCategorie=29&idDetail=184
/menu.php?idCategorie=29&idDetail=256

所有链接到不同的新页面。

这是我尝试过的:

RewriteCond %{QUERY_STRING} idDetail=172
RewriteRule ^menu.php(.*) /new-page/? [R=301,L]

我的重定向正确,但 URL 保留了查询字符串:

http://website.com/new-page/?idCategorie=29&idDetail=172

我也试过这个:

RewriteRule ^menu.php?idCategorie=29&idDetail=172$ http://website.com/new-page/? [L,R=301]

还有这个:

RewriteCond %{QUERY_STRING} idDetail=172(.*)$
RewriteRule ^menu.php /new-page-name?$1 [L,R=301]

而且没用(最后还是有查询字符串)

谢谢!

【问题讨论】:

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


    【解决方案1】:

    你可以使用这条规则:

    RewriteRule ^menu\.php$ /new-page-name? [L,R=301]
    

    注意末尾的?,它用于剥离原始 URI 中的任何现有查询字符串

    【讨论】:

      【解决方案2】:

      除了 anubhava 的回答之外,您还可以使用 Apache 2.4.0 中的 QSD 标志

      RewriteRule ^menu\.php$ /new-page-name [L,R=301,QSD]
      

      http://httpd.apache.org/docs/current/en/rewrite/flags.html#flag_qsd

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-16
        • 2014-11-11
        • 1970-01-01
        • 1970-01-01
        • 2013-06-21
        • 2014-06-01
        • 2017-04-13
        相关资源
        最近更新 更多