Google控制台阻止网址robots.txt重定向301

时间:2017-11-22 09:18:24

标签: .htaccess url redirect mod-rewrite

在我的网站上,我有一些形状如下的网址: https://www.MyShop.com/648-category-name?n=50&amp%253Bn=10&id_category=81

当访问者将每页的默认数量产品从20(默认值)更改为50时,会创建此类网址。

无需索引此类网址。此外,这些网址可能被视为重复内容。

1-在robots.txt中,我提出以下指令:

  • 禁止:/ * n =

2-在Google控制台网址设置中,我添加了以下参数:

  • N =
  • 此参数是否会更改用户看到的页面内容?

  • 我设置:是:更改,重新排序或缩小页面内容

  • 此参数如何影响页面内容:

  • 我设置:其他

    * Googlebot抓取此参数的哪些网址:

  • 我设置:没有网址

3-但是这样做了,在Google控制台中,我收到一条消息,说网址已被阻止(在智能手机上,而不是在计算机上)。 它似乎是Googlebot-mobile抓取工具:

  • 索引应该被robots.txt忽略的网址 指令(来自我在互联网上发现的,似乎并非不正常)
  • 忽略Google控制台的Urls设置

4-为了解决这个问题,我想知道是否有可能**进行301重定向

  • 来自任何有n =
  • 的网址
  • 到位于问号**
  • 之前的网址内容

有人知道应该在htaccess文件中添加哪一行来进行这样的重定向吗?

我事先感谢任何人对此事的任何帮助。

帕特里克

1 个答案:

答案 0 :(得分:0)

您可能希望这只能定位机器人,可能是通过匹配用户代理:

RewriteCond %{HTTP_USER_AGENT} (googlebot|google-mobile) [NC]

如果要将包含查询字符串的所有URL删除到裸URL,可以使用以下命令:

RewriteCond %{QUERY_STRING} .
RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]

如果您只想重定向特定的查询字符串组件,例如n=foo

RewriteCond %{QUERY_STRING} (^|&)n=(.+)(&|$)
RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]

如果您使用的2.4版本的apache版本不支持QSD标记,只需将?添加到%{REQUEST_URI}即可。

修改1:

这很奇怪。此URI中的查询字符串:

https://www.MyShop.com/648-category-name?%252525252525253Bn=10

包含;的{​​{1}}分号%3B,然后百分号%一遍又一遍地编码到%25

如果不解决如何修复该特定问题,您可以修改我上面所述的正则表达式以匹配百分比编码以及:

RewriteCond %{QUERY_STRING} (^|&)([%A-Za-z0-9]+)n=(.+)(&|$)

或者更简单,如果目标更少:

RewriteCond %{QUERY_STRING} (^|&)(.+)n=(.+)(&|$)

但是这也会匹配碰巧以n=结尾的任何查询字符串组件,所以这个URI:

https://www.MyShop.com/648-category-name?somethingn=foo&id_category=42

也会被捕获。

由于您只是针对机器人,因此最好只是完全剥离查询字符串。如果这只是网站特定部分的问题,您还可以通过将这些重写规则放在location块中来缩小网站上应用的位置:

<location /648-category-name>
    RewriteCond %{HTTP_USER_AGENT} (googlebot|google-mobile) [NC]
    RewriteCond %{QUERY_STRING} . # Or any of the other regexes
    RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]
</location>

对您而言可能会或可能不可行的替代方法是添加percent-encoded,如rel="canonical" meta tag中所述,或在robots.txt中添加Disallow: /*?*以停止所有抓取查询字符串的网页,如this answer

中所述

编辑2:

有更有效的方法来编写这些规则。

多个条件,由apache this answer分隔:

RewriteCond %{QUERY_STRING} (^|&)n=10(.+)(&|$) [OR]
RewriteCond %{QUERY_STRING} (^|&)n=20(.+)(&|$) [OR]
RewriteCond %{QUERY_STRING} (^|&)n=50(.+)(&|$) [OR]
RewriteCond %{QUERY_STRING} (^|&)amp%(.+)(&|$) [OR]
RewriteCond %{QUERY_STRING} (^|&)%25252525(.+)(&|$) 
RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]

作为单一条件,使用正则表达式[OR] flag

RewriteCond %{QUERY_STRING} (^|&)n=(10|20|50|amp%|%25)(.+)(&|$)
RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]

由于高流量网站的性能原因,这可能很重要。