重定向 301 失败,路径为目标

重定向 301 失败,路径为目标

我正在使用大量的重定向 301,但它们在新的网络服务器上突然失败了。

在迁移网站之前,我们正在对新的网络服务器进行预生产测试,但有些网站出现故障500内部服务器错误。内容(包括数据库和文件)都从旧服务器镜像到新服务器,因此我们可以测试所有站点是否正常运行。

我把这个问题追溯到mod_alias 的重定向语句,该语句从 .htaccess 中使用,将访问者和搜索引擎从旧内容重定向到新页面。

显然是 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 应该是以方案和主机名开头的绝对 URL,但也可以使用以斜杠开头的 URL 路径,在这种情况下将添加当前服务器的方案和主机名。

当然,我已确认我们在新旧服务器上都使用了 Apache 2.2。旧服务器是 Gentoo 机箱,装有 Apache 2.2.11,而新服务器是 RHEL 5 机箱,装有 Apache 2.2.3。

解决方法是将所有路径更改为完整的 URL,或者将语句转换为 mod_rewrite 规则,但我更喜欢记录的行为。

你有什么经历?

答案1

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

将所有重定向重写为类似的 RewriteRules 可以达到同样的效果,因为 RewriteRules 更加灵活,但是却牺牲了可读性。

答案2

如果Redirect 301 URL-path URL-path失败,您可以尝试。它对我而言是有效的,在没有完整 URL 作为目标的RedirectMatch 301 URL-path URL-path服务器上会抛出 500 内部服务器错误:重定向到非 URL。Redirect

答案3

您必须使用带有新 Web 服务器全名的重定向。因为新 Web 服务器位于新服务器上,所以旧服务器上的 apache 无法仅通过 url 路径来判断要去哪里。当两者不同时,您必须判断它托管在哪台机器上。

您应该考虑另一点:您的旧 wevserver 将来某个时候会关闭吗?您的新服务器会接管旧服务器的 DNS 名称吗?

也许您应该考虑将所有网站迁移到新服务器后再更改 DNS。

相关内容