2009-12-22 88 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