從PHP $_SERVER相關(guān)參數(shù)判斷是否支持Rewrite模塊
如果是//www.dhdzp.com/p1141.html形式的URL,可通過$_SERVER['REQUEST_URI']和$_SERVER['QUERY_STRING']值的區(qū)別來分析,最主要是如果頁面是通過重定向會產(chǎn)生$_SERVER['REDIRECT_QUERY_STRING']和$_SERVER['REDIRECT_URL']兩上參數(shù),因此判斷頁面是否重定向就非常簡單,只需要判斷這兩個值存在的情況就既可,但這只是在Apache環(huán)境下才有效。
如果是ISAPI Rewrite環(huán)境如何判斷?
如果是ISAPI Rewrite環(huán)境,雖然不會產(chǎn)生如上$_SERVER['REDIRECT_QUERY_STRING']和$_SERVER['REDIRECT_URL']兩上參數(shù),但同樣會產(chǎn)生自己獨特的參數(shù)$_SERVER['HTTP_X_REWRITE_URL'],這個參數(shù)只有在ISAPI環(huán)境下才會產(chǎn)生,因此使用這個參數(shù)就能判斷當(dāng)前的URL是何種形式,方法如下:
$isApi = (isset($_SERVER['HTTP_X_REWRITE_URL']) && strpos($_SERVER['HTTP_X_REWRITE_URL'],'?')) ? TRUE : FALSE;
通過對當(dāng)前URL顯示形式的判斷,就能知道程序?qū)⑷绾螆?zhí)行以及是否需要301重定向,如果當(dāng)前URL是//www.dhdzp.com/?=p1141,則需要使用301重定向到//www.dhdzp.com/p1141.html,如下:
header("HTTP/1.1 301 Moved Permanently");
header("Location://www.dhdzp.com/p1141.html");
然后再走重定向后程序的流程,這樣就保證了頁面的統(tǒng)一,同時也解決了ISAPI和Apache的Rewrite循環(huán)重定向問題。
ISAPI和Apache是否重定向判斷:
ISAPI使用:
$_SERVER['HTTP_X_REWRITE_URL']
Apache使用:
$_SERVER['REDIRECT_QUERY_STRING']或$_SERVER['REDIRECT_URL']
只要掌握$_SERVER各參數(shù)的用法,就能輕松解決ISAPI和Apache的Rewrite循環(huán)重定向問題。
下面是其它網(wǎng)友的補充可以參考一下
WordPress通過301重定向?qū)崿F(xiàn)非首先域(非www)跳轉(zhuǎn)向本來是一個很簡單事情,由于沒弄清楚$_SERVER[‘HTTP_X_REWRITE_URL'] 和$_SERVER[‘REQUEST_URI']的區(qū)別導(dǎo)致了循環(huán)重定向問題。
現(xiàn)在來具體研究下$_SERVER[‘HTTP_X_REWRITE_URL'] 和$_SERVER[‘REQUEST_URI']的區(qū)別
首先要糾正一部分的觀點就是IIS+PHP不支持$_SERVER[‘REQUEST_URI']
不是,不支持是PHP Version 版本的問題,php4.4.0不支持 $_SERVER[‘REQUEST_URI'],php5.2.5則增加了支持;
$_SERVER[‘REQUEST_URI']常用來獲當(dāng)前URL
例如://www.dhdzp.com/index.php?p=3
$_SERVER[‘REQUEST_URI']獲得的就是/index.php?p=3這部分。
$_SERVER[“HTTP_X_REWRITE_URL”]則在IIS下獲得的是當(dāng)前URL,在apache下的值為空
例如:
當(dāng)前URL://www.dhdzp.com/
IIS環(huán)境下:
$_SERVER[‘REQUEST_URI'] = /index.php
$_SERVER[“HTTP_X_REWRITE_URL”] =/
apache環(huán)境下:
$_SERVER[‘REQUEST_URI'] = /
$_SERVER[“HTTP_X_REWRITE_URL”] =”
當(dāng)前URL://www.dhdzp.com/index.php
IIS環(huán)境下:
$_SERVER[‘REQUEST_URI'] = /index.php
$_SERVER[“HTTP_X_REWRITE_URL”] =/index.php
apache環(huán)境下:
$_SERVER[‘REQUEST_URI'] = /index.php
$_SERVER[“HTTP_X_REWRITE_URL”] =”
而我需要的就是判斷當(dāng)前URL是否包含/index.php
由此可見,IIS環(huán)境下首先域名重定向用$_SERVER[“HTTP_X_REWRITE_URL”]代替$_SERVER[‘REQUEST_URI'],apache環(huán)境則相反。
- PHP中$_SERVER的詳細(xì)參數(shù)與說明
- PHP $_SERVER詳解
- php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之間的區(qū)別
- php $_SERVER當(dāng)前完整url的寫法
- php $_SERVER["REQUEST_URI"]獲取值的通用解決方法
- PHP5下$_SERVER變量不再受magic_quotes_gpc保護(hù)的彌補方法
- PHP中$_SERVER的詳細(xì)參數(shù)與說明介紹
- php $_SERVER windows系統(tǒng)與linux系統(tǒng)下的區(qū)別說明
- php幾個預(yù)定義變量$_SERVER用法小結(jié)
- php中time()與$_SERVER[REQUEST_TIME]用法區(qū)別
- PHP中$_SERVER使用說明
相關(guān)文章
PHP檢測數(shù)據(jù)類型的幾種方法(總結(jié))
下面小編就為大家?guī)硪黄狿HP檢測數(shù)據(jù)類型的幾種方法(總結(jié))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
PHP下escape解碼函數(shù)的實現(xiàn)方法
很多時候需要用到j(luò)s的escape函數(shù)來轉(zhuǎn)換中文字符,可是用js轉(zhuǎn)換后的字符怎么用php來轉(zhuǎn)換回來呢,下面我就找到了兩個很實用的函數(shù)。2010-08-08
使用VisualStudio開發(fā)php的圖文設(shè)置方法
早先在asp橫行的年代,php和asp一樣,大都都是html中夾雜代碼,說實話,這時候IDE的確用處不是很大,倒是類似于dw之類的設(shè)計器甚為上手。2010-08-08
SWFUpload與CI不能正確上傳識別文件MIME類型解決方法分享
問題:swfupload上傳任何文件的mime類型均為application/octet-stream。2011-04-04
echo(),print(),print_r()之間的區(qū)別?
echo(),print(),print_r()之間的區(qū)別?...2006-11-11

