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。当然,这需要我将寻呼机移动到其他位置,但这已经在我的特定情况下处理了。
答案 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]
这应该达到你想要的目的。