1

谷歌在一个网站的侧边栏中发现了一个寻呼机,它允许用户在博客条目上滚动浏览“标签”,每次寻呼机点击都会将您带到一个新的网址,例如example.com/blog/article-title?page=1

由于博客有大约 500 篇文章,而分页器有大约 140 页标签,谷歌已经为我的网站索引了非常多的页面。我不想要这个有很多原因。我已经删除了此标记块上的寻呼机,因为它完全没有必要,但现在想对所有这些?page=XURL 进行 301 重定向,希望随着时间的推移,Google 会将它们从索引中删除。

URL 如下所示:

如何通过 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 完全忽略了标头中定义的规范 URL,并将所有 30,000 多个 URL 组合编入索引。在下面接受的答案中进行 htaccess 重写是在这些页面上正确执行 301。当然,这需要我将寻呼机移到别处,但在我的特殊情况下已经处理过了。

4

3 回答 3

2

您的问题是您试图重定向 URL 而不是查询字符串。看到这个问题:Query string redirection with htaccess

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

RewriteCond %{QUERY_STRING} ......
RewriteRule ....
于 2012-11-13T01:44:18.067 回答
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]

如果这不起作用,您的脚本中可能还有其他问题。

于 2012-11-13T02:53:42.060 回答
2
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/blog/
RewriteCond %{QUERY_STRING} page
RewriteRule (.*) /$1? [R=301,L]

这应该可以实现您正在尝试做的事情。

于 2012-11-13T15:30:08.980 回答