.htaccess 是否可以在适当的时候301重定向一个域,但仍然发送404头?

.htaccess 是否可以在适当的时候301重定向一个域,但仍然发送404头?,.htaccess,redirect,mod-rewrite,.htaccess,Redirect,Mod Rewrite,我正在使用RewriteCond%{HTTP_HOST}^(www\.)?oldsite\.com$[NC] 重写规则^.+$http://newsite.com%{REQUEST_URI}[L,R=301]将用户从一个站点重定向到另一个站点。此实例中的根异常是故意的;也就是说,我希望oldsite.com的访问者不被重定向,但是oldsite.com/anypage的访问者被重定向到newsite.com/anypage 然而,当有人手动输入oldsite.com/qwerty(一个不存在的页

我正在使用
RewriteCond%{HTTP_HOST}^(www\.)?oldsite\.com$[NC]
重写规则^.+$http://newsite.com%{REQUEST_URI}[L,R=301]
将用户从一个站点重定向到另一个站点。此实例中的根异常是故意的;也就是说,我希望oldsite.com的访问者不被重定向,但是oldsite.com/anypage的访问者被重定向到newsite.com/anypage

然而,当有人手动输入oldsite.com/qwerty(一个不存在的页面)时,他们(可能还有任何搜索引擎)会得到301重定向,而不是404错误。是否有一种基于规则的方法来避免这种行为,或者我是否需要更改我的.htaccess,以便列出单独的301重定向(这样其他任何东西都会给出所需的404结果)?

为简单起见,我将在这里指代“谷歌”,但它适用于任何搜索引擎

这基本上不是问题。301重定向主要是为了保持你的谷歌排名从旧域名到新域名,并保持书签的有效性。如果一个页面存在于旧域中,它应该仍然存在于新域中

如果有人在旧域上键入一个不存在的页面,用户将在新域上看到404消息,但这没关系。谷歌不会抓取那个网址。事实上,任何自动爬虫程序都不应该遇到该url,所以在404状态代码之前获得301重定向的语义并不真正适用

有两件事需要注意:

  • 您在旧域上有一个页面,该页面现在以新域上不同的名称存在。您应该为此添加手动异常:

    RewriteRule ^mypage$ https://newsite.com/new-page-with-something-fancy [R=301,L]
    
  • 您在旧域上有一个页面,而新域上已不存在该页面。您应该手动添加一个异常,返回“已消失”状态代码

    RewriteRule ^i-no-longer-exist$ - [G,L]
    

实际上并不存在一种检查重定向页面状态代码的方法,除非您使用类似于curl的脚本来检查其他站点,或者使用类似于代理的脚本。这两种方法都是非常低效的,对网站排名的影响远远超过了它所能获得的。

尽管我在问题中没有提到搜索引擎,但当我提出这个问题时,这实际上是我的想法(谷歌没有遇到404搜索引擎搜索不存在的页面)。记住你所说的,我将保持301重定向的原样。(除了域名本身,所有页面地址均未更改。)谢谢!