2011-11-08 67 views
0

http://www.hesa.ac.uk上,我們使用自定義404處理腳本將用戶從例如http://www.hesa.ac.uk/press重定向到實際的URL,這是一個醜陋的CMS:http://www.hesa.ac.uk/index.php?option=com_content&task=category&sectionid=1&id=1&Itemid=161使用PHP 5.3.5/IIS7添加到301標頭的默認內容

我們正在運行fast-cgi。

301頭被髮送,然後是位置頭。

對於99%的用戶來說,它工作正常,但其中一些用戶報告5到6秒的加載時間。這一點,我們認爲,由於有點流浪含量在重定向出現:

<head><title>Document Moved</title></head> 
<body><h1>Object Moved</h1>This document may be found <a HREF="http://www.hesa.ac.uk/index.php?option=com_content&amp;task=category&amp;sectionid=1&amp;id=1&amp;Itemid=161">here</a></body> 

這不是我們可以看到代碼的任何輸出。下面是其中實際執行重定向的方法:

/** 
* Do the actual redirection to the win URL 
* 
*/ 
function doRedirection() { 


     //start output buffering to trap any content that is output by default by the headers 
     @ob_start(); 

     //permanently moved header 
     //header('HTTP/1.1 301 Moved Permanently'); 

     //fast-cgi, so use this:   
     header('Status: 301 Moved Permanently', true);    

     @ob_end_clean(); // clear output buffer 

     //location header 
     header("Location: ". $this->winUrl); 

     @ob_end_clean(); // clear output buffer 

     die(); 



} 

我似乎無法找到這表明如何停止的內容被輸出的這種額外位的任何資源。我已經嘗試了上述方法的各種變體來進行重定向。

有沒有人有類似的問題?有沒有人有任何想法?

乾杯,

編輯:我們已經意識到,這是預期的行爲IIS7,但IIS6永遠不會使用相同的代碼來做到這一點,而且無論是期待與否,我們的用戶抱怨,這似乎是問題。編輯2:似乎唯一可行的解​​決方案是放棄這種方法,而是轉向IIS7的URL重寫功能,這需要編寫一個C#類,它克隆了PHP類的功能,然後將其插入到IIS中。編輯3:但是,設置內容長度:0頭可能可能有所幫助。雖然沒有測試過。

回答

0

原來問題實際上是在重定向代碼中使用內置的PHP函數getHostByAddr()。沒有正確設置其DNS記錄的客戶端主機會遇到5到6秒的延遲(從IIS7開始,我們從來沒有遇到IIS6的這個問題)的getHostByAddr()延遲。如果找到替代功能並將其交換出去,問題就會消失。