如何使用htaccess删除URL参数但保留动态元素?

时间:2012-11-13 01:35:04

标签: .htaccess mod-rewrite redirect

Google在网站的侧边栏中发现了一个寻呼机,允许用户在博客条目中滚动浏览“标记”,每个寻呼机点击一次,即可转到新的网址,例如example.com/blog/article-title?page=1

由于博客有大约500个帖子,而寻呼机有大约140页的标签,谷歌已经为我的网站索引了很多页面。出于多种原因,我不希望这样。我已经删除了此标记块上的寻呼机,因为它完全没有必要,但现在希望对所有这些?page=X网址执行301重定向,希望随着时间的推移,Google会将其从索引中删除。

网址如下所示:

如何通过htaccess进行301重定向,将用户发送到http://example.com/blog/blog-article-title

我在

上尝试了很多变化
  • RewriteRule ^blog/(.*).?page(.*)$ /$1/blog/$2? [R=301,L]

  • RedirectMatch 301 ^/blog/(.*)\?page(.*)$ /blog/$1

但到目前为止没有运气。任何帮助将不胜感激。

修改:对于可能偶然发现的其他人,Google完全忽略了标头中定义的规范网址,并将所有30,000多个网址组合编入索引。在下面接受的答案中执行htaccess重写是在这些页面上正确执行301。当然,这需要我将寻呼机移动到其他位置,但这已经在我的特定情况下处理了。

3 个答案:

答案 0 :(得分:2)

您的问题是您尝试重定向URL而不是查询字符串。请参阅此问题:Query string redirection with htaccess

基本上,您需要基于查询字符串的RewriteCond。这将是两条线;即:

RewriteCond %{QUERY_STRING} ......
RewriteRule ....

答案 1 :(得分:2)

如果没有query_string选项,这应该有效:

RewriteEngine On
# one url with many params
#RewriteRule ^blog/blog-article?(.*) http://www.yourblog.com/index\.php$1 [R=301,L]
# or many url
RewriteRule ^blog/sub(.*)\?(.*) http://www.yourblog.com/onething/$1?$2 [R=301,L]

如果这不起作用,您的脚本可能会遇到其他问题。

答案 2 :(得分:2)

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/blog/
RewriteCond %{QUERY_STRING} page
RewriteRule (.*) /$1? [R=301,L]

这应该达到你想要的目的。