![Googelbot 找到了我的原始 URI,尽管我有一个有效的重写指令](https://linux22.com/image/735058/Googelbot%20%E6%89%BE%E5%88%B0%E4%BA%86%E6%88%91%E7%9A%84%E5%8E%9F%E5%A7%8B%20URI%EF%BC%8C%E5%B0%BD%E7%AE%A1%E6%88%91%E6%9C%89%E4%B8%80%E4%B8%AA%E6%9C%89%E6%95%88%E7%9A%84%E9%87%8D%E5%86%99%E6%8C%87%E4%BB%A4.png)
我有 :
RewriteRule ^Article/([^/]*)$ /article.php?newsid=$1 [L]
这意味着 URL 必须是//example.com/Article/855563
但 Google 会抓取//example.com/article.php?newsid=855563
。我能做些什么来防止这种情况发生?或者将 301 重定向到example.com/Article/855563
?
答案1
首先,您需要确定 Google 抓取错误 URL 的原因。
您是否更改了现有的 URL 结构(已被搜索引擎编入索引并链接到外部)?在这种情况下,您需要实施从旧 URL 到新 URL 的重定向,以保留 SEO 并让搜索引擎在 SERP 中替换旧 URL。
您是否在无意中在内部链接到错误的 URL,并向搜索引擎公开“错误的”URL?如果是这样,这些必须被修复前实施重定向。
否则,Google 就不应该能够发现“错误”的 URL。
您还应该rel="canonical"
在页面头部实现一个标签,以便向搜索引擎指示正确的规范 URL。
为了将 URL 从外部重定向/article.php?newsid=<newsid>
到/Article/<newsid>
(规范 URL) - 现有 URL 的反向内部重写- 然后您可以在文件顶部附近执行类似以下的操作.htaccess
(前现有的重写):
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^newsid=([^&]*)
RewriteRule ^article\.php$ /Article/%1 [R=302,L]
REDIRECT_STATUS
为了防止重定向循环,检查环境变量的第一个条件是必要的 - 它确保规则仅在来自客户端的直接请求上处理,而不是重写的请求(您现有的指令)。
第二个条件捕获 URL 参数的值newsid
(出现在 URL 路径的开头)。该值保存在%1
反向引用中(稍后在RewriteRule
代换)。请注意,这将捕获任何事物(如您重写的那样),但是,如果newsid
值始终是数字,那么这应该更加严格。例如^newsid=(\d+)
(仅 1 位或多位数字)。
请注意,目前这是 302(临时)重定向。只有确认其正常工作后才可将其更改为 301(永久)重定向 - 以避免任何缓存问题。