从 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 重定向中删除查询字符串的主要内容,如果未能解决你的问题,请参考以下文章