解決安裝fastcgi後$_SERVER['REQUEST_URI']爲空的問題

因爲網站併發數的不但提升,爲了提高服務器的處理請求的性能決定安裝fastcgi(服務器部署的LAMP環境),正確的安裝完成後發現網站的新聞 頁面都404了,這些頁面都使用了URL重寫來優化網站,通過調試後筆者發現$_SERVER['REQUEST_URI']的值爲空,於是我 將$_SERVER['REQUEST_URI']變量替換成$_SERVER['REDIRECT_URL'],可喜的是那些原本404的頁面現在全能 正常訪問了。

   但這種替換並不是最好的解決方案,因爲在nginx和IIS的web服務器下我們無法通過$_SERVER['REDIRECT_URL']獲得重寫uri。因此筆者參考Zend Framework編寫了如下所示的函數,來準確的在各種環境下獲得重寫的uri

function getRequestUri() {
  if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { 
     // check this first so IIS will catch 
     $requestUri = $_SERVER['HTTP_X_REWRITE_URL']; 
   } elseif (isset($_SERVER['REDIRECT_URL'])) { 
     // Check if using mod_rewrite 
     $requestUri = $_SERVER['REDIRECT_URL']; 
   } elseif (isset($_SERVER['REQUEST_URI'])) { 
     $requestUri = $_SERVER['REQUEST_URI']; 
   } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { 
     // IIS 5.0, PHP as CGI 
     $requestUri = $_SERVER['ORIG_PATH_INFO']; 
     if (!empty($_SERVER['QUERY_STRING'])) { 
       $requestUri .= '?' . $_SERVER['QUERY_STRING']; 
     } 
   } 
   return $requestUri; 
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章