redirect301失败,path为目的地

我正在使用大量的redirect301的突然失败,在一个新的networking服务器。

在迁移网站之前,我们正在对新的networking服务器进行预生产testing,但有些网站因500内部服务器错误而失败。 内容,包括数据库和文件,都是从旧的镜像到新的服务器,所以我们可以testing所有的网站是否正常工作。

我将这个问题追溯到mod_alias的redirect语句,该语句用于从.htaccess中将访问者和search引擎从旧内容redirect到新页面。

显然,Apache服务器要求目标是完整的url,包括协议和主机名。

Redirect 301 /directory/ /target/ # Not Valid Redirect 301 /main.html / # Not Valid Redirect 301 /directory/ http://www.example.com/target/ # Valid Redirect 301 /main.html http://www.example.com/ # Valid 

这与 Apache 2.2的Apache文档 相矛盾 ,其中指出:

新的URL应该是以scheme和hostname开头的绝对URL,但也可以使用以斜杠开头的URLpath,在这种情况下,将会添加当前服务器的scheme和主机名。

当然,我确认我们在旧服务器和新服务器上都使用Apache 2.2。 旧服务器是Apache 2.2.11的Gentoo框,而新服务器是Apache 2.2.3的RHEL 5框。

解决方法是将所有path更改为完整的URL,或者将语句转换为mod_rewrite规则,但我更喜欢文档化的行为。

你有什么经验?

Redirect 301 URL-path URL-path失败时,您可以尝试RedirectMatch 301 URL-path URL-path 。 它在我的服务器上工作的Redirect没有一个完整的URL作为目的地是抛出500内部服务器错误:redirect到非URL。

你必须使用新的Web服务器的全名redirect。 因为新的Web服务器是在一个新的服务器上,旧的服务器上的Apache不能告诉只能通过URLpath。 当它不一样时,你必须告诉它托pipe在哪台机器上。

你应该考虑另外一点:将来你的旧wevserver会closures一段时间吗? 你的新服务器将接pipe旧的DNS名称?

也许你应该考虑在将所有网站迁移到新的服务器之后更改dns。

看起来这种行为在Apache版本和发行版本之间有所不同,并且与Apache文档(如问题中所述)相矛盾。 很烦人。 我可以find哪个版本支持哪种行为没有明显的模式。

重写所有redirect到类似的RewriteRules的诀窍,因为RewriteRules更多function,但代价是可读性。