PHP包含重定向的URL

时间:2009-12-22 11:29:46

标签: php redirect include

我继承了一个糟糕的行为,在我们的网络上,我们有许多(阅读:许多)托管网站这样做:

include "http://www.example.com/news.php";

是的,我知道这是坏的,不安全的等等,它应该是echo file_get_contents(...);或类似的东西(“news.php”的输出只是HTML),但不幸的是这就是他们现在使用,我们不能轻易改变它。

直到昨天它一直很好。我们开始将所有www.example.com请求重定向到example.com。当人们包含带有www的版本时,PHP似乎不会遵循此重定向,因此此重定向会破坏很多网站。

总结一下:有没有办法让PHP遵循这些重定向?我只能在example.com端或通过服务器范围的配置进行修改。

4 个答案:

答案 0 :(得分:2)

你在评论中说:“我可以去改变所有的包含,但它只是做了很多工作。”

是。这是“糟糕的,不安全的,但我没有理由改变它的代码”回来咬你。这将是一项很多工作;但现在有一个令人信服的理由来改变它。有时,清理旧的混乱是最简单的方法,虽然不是最容易的。

编辑:我并不是说“这是你的代码和你的错” - 相反,“糟糕的代码通常需要修复很多工作,但通常工作少于持续打桩工作在它周围永恒,只是为了保持它有点工作“。

至于“改变它”,我建议使用cURL - 它比PHP的HTTP fopen包装器好得多。

答案 1 :(得分:1)

你不能使用卷曲吗?在curl_setopt中,它有一个跟踪重定向的选项。

答案 2 :(得分:0)

让我们从重定向http响应开始。

<?php
error_reporting(E_ALL);
var_dump( get_headers('http://www.example.com/news.php') );
// include 'http://www.example.com/news.php'

输出应包含HTTP/1.0 301 Moved Permanently作为第一个条目,Location: http://example.com/news.php作为第一个条目。

答案 3 :(得分:0)

我认为PHP本身提供的任何解决方案都不会有帮助......我只是认为它们中没有任何一个遵循标题而不是。尽管如此,我确实认为这种行为是正确的:你要求得到某个请求的结果而你得到了它。结果告诉你去别处看的事实本身就是一个有效的结果。

如果我是你,我会看看cURL。它有一个PHP扩展,它允许你告诉它跟随标题并到达你想要的地方。如果这不可用(例如,你绝对必须使用你当前的方法),你需要恢复'源'服务器上的重定向:也许你可以让它返回信息或重定向基于请求IP地址或类似的东西?