从 301 重定向中删除查询字符串

Posted

技术标签:

【中文标题】从 301 重定向中删除查询字符串【英文标题】:Remove query strings from 301 redirect 【发布时间】:2012-05-29 07:32:23 【问题描述】:

我正在努力为最初使用查询字符串构建的网站创建适当的 301 重定向。旧的 URL 结构如下所示:

http://www.oldsite.com/about/index.cfm?fuseaction=cor_av&artID=5049

我想将整个子文件夹(名为“about”)重定向到新域上的新页面。新域的 URL 如下所示:

http://www.newsite.com/info

所以,我设置了一个如下所示的重定向:

redirectMatch 301 ^/about/ http://www.newsite.com/info  

它的重定向很好,但它保留了原始 URL 字符串,因此新 URL 在浏览器中最终看起来像这样:

http://www.newsite.com/info/?fuseaction=cor_av&artID=5049 

我绝对不是 Apache/301 专家,不知道如何解决这个问题。我只想从 ?开。

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

两个选项:

redirectMatch 301 ^/about/ http://www.newsite.com/info? 

或:

RewriteEngine on
RewriteRule ^about/(.*) http://www.newsite.com/info? [L,R=301]

最后的问号似乎是关键。第二个看起来更干净一些(第一个在 URL 的末尾留下一个问号)

【讨论】:

请注意,在 Apache >= 2.4 上,您可以使用 QSD 标志而不是添加结束问号:RewriteRule ^about/(.*) http://www.newsite.com/info [QSD,L,R=301]【参考方案2】:

尝试将此代码添加到为oldsite.com指定的.htaccess中:

RewriteCond %REQUEST_URI ^/about/index.cfm$
RewriteRule ^(.+) http://www.newsite.com/info/ [R=301,QSA]

跟进?

【讨论】:

不,QSA a将旧查询字符串附加到新 url。要d放弃它,请使用标志QSD (apache >=2.4) 或仅添加?,如已接受的答案中所示。见Apache RewriteRule Flags 是的,应该用 QSD 替换 QSA。此选项从 apache 2.4 开始可用。

以上是关于从 301 重定向中删除查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

301 重定向没有子目录/查询字符串

mod_rewrite:从 URL 中删除查询字符串?

浏览器如何使用查询字符串缓存 301 重定向

HTACCESS-重定向并删除所有查询字符串

301 通过 .htaccess 将查询字符串重定向到 SEO 友好的 URL

301查询字符串重定向