簡體   English   中英

使用PHP 5.3.5 / IIS7將默認內容添加到301標頭中

[英]Default content being added to 301 headers with PHP 5.3.5 / IIS7

http://www.hesa.ac.uk上 ,我們使用自定義404處理腳本將用戶從http://www.hesa.ac.uk/press (例如)重定向到實際網址,該網址是丑陋的CMS之一: http : //www.hesa.ac.uk/index.php? option=com_content&task = category&sectionid=1& id= 1& Itemid=161

我們正在運行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();



}

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

有人遇到過類似的問題嗎? 有人有什么想法嗎?

干杯,

G

編輯:我們已經意識到,這是IIs7的預期行為,但是IIS6從未使用相同的代碼來完成它,並且無論是否預期,我們的用戶都在抱怨,這似乎是問題所在。

編輯2:似乎唯一可行的解​​決方案是放棄此方法,而轉而使用IIS7的url重寫功能,這需要編寫一個C#類,該類將克隆PHP類的功能,然后將其插入IIS。

編輯3:但是,設置content-length:0標頭可能會有所幫助。 尚未測試。

事實證明,問題實際上是在重定向代碼中使用了內置PHP函數getHostByAddr()。 沒有正確設置其DNS記錄的客戶端主機會從getHostByAddr()經歷5到6秒的延遲(在IIS7下,IIS6從未遇到此問題)。 如果找到替代功能並將其換出,問題就會消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM