因爲網站併發數的不但提升,爲了提高服務器的處理請求的性能決定安裝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; }