【问题标题】:htaccess 301 redirect before rewrite and remove query stringhtaccess 301 在重写和删除查询字符串之前重定向
【发布时间】:2014-06-01 23:06:15
【问题描述】:

根据用户输入的内容,我有两个重写条件。第一个是我们已经上市的公司,第二个是我们没有上市的。

RewriteRule ^companies/([^/]+)/([0-9]+)/$ %{DOCUMENT_ROOT}/index.php?action=companies&param=$1&articleId=$2 [NC,L,B]
RewriteRule ^companies/([^/]+)/$ %{DOCUMENT_ROOT}/index.php?action=companies&param=$1&articleId=0 [NC,L,B]

我发现了一些常见的拼写错误,例如'm&s' 而不是 'marks & spencer' 所以我想 301 直接将用户重定向到那里,例如

301 重定向从:http://www.example.com/companies/m&s/http://www.example.com/companies/marks-\&-spencers/557/

我在不同位置的 htaccess 中使用过这个:

redirectMatch 301 ^/companies/m&s/$ http://www.example.com/companies/marks-\&-spencers/557/

但是生成的 URL 是 http://www.example.com/companies/marks-&-spencers/557/?action=companies&param=aldie&articleId=0

如何让它在没有查询字符串的情况下显示,所以它只是http://www.example.com/companies/marks-&-spencers/557/

【问题讨论】:

    标签: .htaccess redirect


    【解决方案1】:

    如果您的 Apache 版本 >= 2.4,您可以使用标志 [QSD] 以避免重写查询字符串:

    RewriteRule ^companies/m&s/$ http://www.example.com/companies/marks-\&-spencers/557/ [R=301,QSD]
    

    如果是旧版本的 Apache,你可以使用一个小技巧,在重写的 URL 的末尾添加一个问号,以获得一个空的查询字符串:

    RewriteRule ^companies/m&s/$ http://www.example.com/companies/marks-\&-spencers/557/? [R=301]
    

    【讨论】:

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