我正在使用RewriteCond %{HTTP_HOST} ^(www\.)?oldsite\.com$ [NC]
RewriteRule ^.+$ http://newsite.com%{REQUEST_URI} [L,R=301]
将用户从一个站点重定向到另一个站点。这个例子中的根异常是故意的;也就是说,我希望oldsite.com的访问者不被重定向,但访问oldsite.com/anypage的访问者将被重定向到newsite.com/anypage。
然而,当有人手动输入oldsite.com/qwerty(一个不存在的页面)时,他们(可能是任何搜索引擎)获得301重定向而不是404错误。是否有基于规则的方法来避免这种行为,或者我是否需要更改我的.htaccess以便列出单独的301重定向(以便其他任何内容可以提供所需的404结果)?
答案 0 :(得分:1)
为简单起见,我会在此处提及“Google”,但它适用于任何搜索引擎。
这基本上不是问题。 301重定向主要用于保持您的Google排名不受旧域名的影响,并保持书签有效。如果旧域上存在某个页面,则该页面应该仍然存在于新域中。
如果有人在旧域上键入不存在的页面,则用户将在新域上看到404消息,但这没关系。 Google不会抓取该网址。实际上,任何自动爬虫都不应该遇到该URL,因此在404状态代码之前获取301重定向的语义并不真正适用。
有两件事需要注意:
您在旧域上有一个页面,现在在新域名下以不同的名称存在。您应该为此添加手动例外:
RewriteRule ^mypage$ https://newsite.com/new-page-with-something-fancy [R=301,L]
旧域上的页面在新域中不再存在。您应该手动添加一个返回“Gone”状态代码的异常
RewriteRule ^i-no-longer-exist$ - [G,L]
实际上并不存在检查重定向页面的状态代码的方法,除非你进入重写到使用curl之类的脚本来检查其他网站或使用类似代理的东西。两者都非常低效,并且会损害您网站的排名,而不是可能获得的排名。