2009-12-22 46 views
1

我继承了一个糟糕的sitation在那里我们的网络,我们有很多(读:很多)URL包括托管网站这样做:PHP从重定向

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

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

它曾经工作得很好,直到昨天。我们开始301将所有www.example.com请求重定向到example.com。当人们用www包含版本时,PHP似乎没有遵循这个重定向,所以这个重定向打破了很多站点。

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

+0

通过error_reporting = E_ALL(或更高版本)获得的确切错误消息(或消息)是什么? – VolkerK 2009-12-22 11:35:58

+0

永久移动文档已移至此处。 – 2009-12-22 11:41:25

+2

这听起来不像是一个PHP错误消息;-)可能是,网络服务器不发送301状态代码,但“200好”。 – VolkerK 2009-12-22 11:45:27

回答

2

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

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

编辑:我不是这个意思“这是你的代码和你的错” - 而“坏的代码通常是大量的工作来解决的,但它通常不工作,而不是保持它周围堆放黑客永恒,只是为了保持它的工作“。至于“去改变它”,我推荐使用cURL - 它比PHP的HTTP fopen包装更好。

+0

在我的防守中,我没有编写错误的代码。我继承了它:( – 2009-12-22 13:45:42

+0

@ Bart van Heukelom:对不起,我在原版中太不屑一顾了。 – Piskvor 2009-12-22 16:20:08

0

让我们从重定向http repsonse开始吧。

<?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地方。

+0

是的,但我无法更改该代码,或者我只是将其更改为file_get_contents。我必须在example.com方面做到这一点。 – 2009-12-22 12:21:45

+1

...或通过服务器范围的PHP设置。那么,我可以去改变所有的内容,但它只是一个很大的工作:p – 2009-12-22 12:24:02

+0

它只是一个测试脚本。将它放在/ include目录中,其中'include'http://www.example.com/news.php''不像预期的那样工作并检查输出。 – VolkerK 2009-12-22 12:24:21

0

我不认为PHP自身提供的任何解决方案都有帮助...我只是不认为它们中的任何一个都遵循标题,而不是什么。对于它的价值,我确实认为,这种行为是正确的:你要求某个请求的结果,并且你得到了它。结果告诉你看别处的事实本身就是一个有效的结果。

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

+0

http fopen包装确实遵循'Location:xyz'头部,除非另有说明(例如通过get_headers()) – VolkerK 2009-12-22 12:21:18

1

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

+0

我猜答案是“否”,因为“但不幸的是,这是他们现在使用的,我们不能轻易改变那“;-) – VolkerK 2009-12-22 12:30:13

+0

Ops,错过了:P – AntonioCS 2009-12-22 12:30:49

+1

他确实说'不能||容易||改变'。所以改变它并不是不可能的 – AntonioCS 2009-12-22 12:32:38