APACHE的AcceptPathInfo指令使用介紹
更新時(shí)間:2013年01月18日 17:11:44 作者:
從APACH2.0.30以上服務(wù)器中去掉了acceptpathinfo;如果需要的話需要在http.conf中添加AcceptPathInfo On這一條
學(xué)習(xí)zfdemo的時(shí)候提到設(shè)置 AcceptPathInfo 指令.
有時(shí)我們在做虛擬靜態(tài)化或者讓路徑看起來很漂亮的時(shí)候,可能會看到http://www.example.com/index.php/html1這樣URL地址,而在訪問的實(shí)際是根目錄下的index.php文件,而把/html1做為PATH_INFO環(huán)境變量傳遞給腳本。而對于apache來說上面的地址能否正確運(yùn)行取決于AcceptPathInfo指令的配置
AcceptPathInfo 指令
說明 是否接受附帶多余路徑名信息的請求
語法 AcceptPathInfo On|Off|Default
默認(rèn)值 AcceptPathInfo Default
作用域 server config, virtual host, directory, .htaccess
覆蓋項(xiàng) FileInfo
狀態(tài) 核心(C)
模塊 core
兼容性 僅在 Apache 2.0.30 及以后的版本中可用
此指令決定是否接受在實(shí)際文件名(或?qū)嶋H目錄中一個不存在的文件)后跟隨多余路徑名信息的請求。這個多余的路徑名信息可以當(dāng)作PATH_INFO環(huán)境變量傳遞給腳本。
比如說,假設(shè)/test/所指向的目錄下只包括一個文件:here.html ,那么對/test/here.html/more和/test/nothere.html/more的請求都會將PATH_INFO環(huán)境變量設(shè)為"/more"。
AcceptPathInfo指令的取值范圍:
Off
僅當(dāng)一個請求映射到一個真實(shí)存在的路徑時(shí),才會被接受。這樣,如上述/test/here.html/more這樣在真實(shí)文件名后跟隨一個路徑名的請求將會返回一個"404 NOT FOUND"錯誤。
On
只要前導(dǎo)路徑可以映射到一個真實(shí)存在的文件,就可以接受該請求。這樣,只要上述/test/here.html能夠映射到一個有效的文件,那么對/test/here.html/more的請求就會被接收。
Default
是否接收附帶多余路徑名信息的請求由其對應(yīng)的處理器來決定。對應(yīng)普通文本的核心處理器默認(rèn)會拒絕PATH_INFO 。而用于伺服腳本的處理器,比如cgi-script和isapi-isa,默認(rèn)會接受PATH_INFO 。
AcceptPathInfo指令存在的首要目的就是允許您覆蓋處理器關(guān)于是否接受PATH_INFO的默認(rèn)設(shè)置。這種覆蓋是很必要的。比如說,當(dāng)您使用了類似INCLUDES這樣的過濾器來根據(jù)PATH_INFO產(chǎn)生內(nèi)容時(shí)。核心處理器通常會拒絕這樣的請求,而您就可以用下述的配置使這樣的腳本成為可能:
Options +Includes
SetOutputFilter INCLUDES
AcceptPathInfo On
apache 2.0以上中的默認(rèn)的是沒有acceptpathinfo
從APACH2.0.30以上服務(wù)器中去掉了acceptpathinfo;如果需要的話需要在http.conf中添加AcceptPathInfo On這一條。即原來的
Options FollowSymLinks includes
AllowOverride None
改成
Options FollowSymLinks includes
AllowOverride None
AcceptPathInfo On
此指令決定了是否接受包含在某確定文件(或是某現(xiàn)有目錄的一個不存在的文件)后附加的路徑信息。此路徑信息將在腳本里以PATH_INFO環(huán)境變量的形式出現(xiàn)。
比如說,假設(shè)/test/所指向的目錄下只包括一個文件:here.html。那么對/test/here.html/more和/test/nothere.html/more的請求都會得到/more這樣的PATH_INFO變量。
AcceptPathInfo指令的三個參數(shù)為:
off
僅當(dāng)一個請求映射到一個真實(shí)存在的路徑時(shí),它才會被接受。這樣,如上述/test/here.html/more這樣的在真實(shí)文件名后跟隨一個路徑名的請求將會返回一個404 NOT FOUND錯誤。
on
如果前面的路徑映射到一個真實(shí)存在的文件,此請求將被接受。如果/test/here.html映射著一個有效的文件,上例中/test/here.html/more這個請求就會被接受。
default
對于附加路徑名的請求的處理方式由其對應(yīng)的處理器來決定。對應(yīng)普通文本的核心處理器默認(rèn)會拒絕PATH_INFO。而用于伺服腳本的處理器,比如cgi-script和isapi-isa,默認(rèn)會接受PATH_INFO。
PHP中的全局變量$_SERVER['PATH_INFO']是一個很有用的參數(shù),眾多的CMS系統(tǒng)在美化自己的URL的時(shí)候,都用到了這個參數(shù)。
對于下面這個網(wǎng)址:
http://www.test.com/index.php/foo/bar.html?c=index&m=search
我們可以得到 $_SERVER['PATH_INFO'] = ‘/foo/bar.html',而此時(shí) $_SERVER['QUERY_STRING'] = 'c=index&m=search';
通常,我們最初開始PHP程序編寫的時(shí)候,都會使用諸如: http://www.test.com/index.php?c=search&m=main 這樣的URL,這種URL不僅看起來非常奇怪,而且對于搜索引擎也是非常不友好的。很多搜索引擎收錄的時(shí)候,都會忽略Query String之后的內(nèi)容,google雖然不會忽略Query String,但是對于其他不含Query String的頁面,會給于比較高的PR值。
下面是一段解析PATH_INFO的非常簡單的代碼:
<?php
if( !isset( $_SERVER['PATH_INFO'] ) ){
$pathinfo = 'default';
}else{
$pathinfo = explode('/', $_SERVER['PATH_INFO']);
}
if( is_array($pathinfo) AND !empty($pathinfo) ){
$page = $pathinfo[1];
}else{
$page = 'a.php';
}
require "$page.php";
?>
php文件名后加斜線“/”不能正常訪問,報(bào)not found錯誤
系統(tǒng)壞后,重裝系統(tǒng)后,配置php環(huán)境。用的軟件和以前的版本都相同。
環(huán)境配置好后,因工作項(xiàng)目都是單入口文件,index.php文件后邊加了斜線才能進(jìn)入。沒換系統(tǒng)前都可以訪問,可以排除軟件版本問題.
剛想進(jìn)入工作項(xiàng)目,就報(bào)not found 不知為何。測試后得知,php文件名后加斜線“/”不能正常訪問
詢問多人,未果。google 度娘 未果
找公司一資深php工程師
說是apache有這樣一個指令 :AcceptPathInfo
在apache的配置文件里面加上:AcceptPathInfo on 就ok了。
有時(shí)我們在做虛擬靜態(tài)化或者讓路徑看起來很漂亮的時(shí)候,可能會看到http://www.example.com/index.php/html1這樣URL地址,而在訪問的實(shí)際是根目錄下的index.php文件,而把/html1做為PATH_INFO環(huán)境變量傳遞給腳本。而對于apache來說上面的地址能否正確運(yùn)行取決于AcceptPathInfo指令的配置
AcceptPathInfo 指令
說明 是否接受附帶多余路徑名信息的請求
語法 AcceptPathInfo On|Off|Default
默認(rèn)值 AcceptPathInfo Default
作用域 server config, virtual host, directory, .htaccess
覆蓋項(xiàng) FileInfo
狀態(tài) 核心(C)
模塊 core
兼容性 僅在 Apache 2.0.30 及以后的版本中可用
此指令決定是否接受在實(shí)際文件名(或?qū)嶋H目錄中一個不存在的文件)后跟隨多余路徑名信息的請求。這個多余的路徑名信息可以當(dāng)作PATH_INFO環(huán)境變量傳遞給腳本。
比如說,假設(shè)/test/所指向的目錄下只包括一個文件:here.html ,那么對/test/here.html/more和/test/nothere.html/more的請求都會將PATH_INFO環(huán)境變量設(shè)為"/more"。
AcceptPathInfo指令的取值范圍:
Off
僅當(dāng)一個請求映射到一個真實(shí)存在的路徑時(shí),才會被接受。這樣,如上述/test/here.html/more這樣在真實(shí)文件名后跟隨一個路徑名的請求將會返回一個"404 NOT FOUND"錯誤。
On
只要前導(dǎo)路徑可以映射到一個真實(shí)存在的文件,就可以接受該請求。這樣,只要上述/test/here.html能夠映射到一個有效的文件,那么對/test/here.html/more的請求就會被接收。
Default
是否接收附帶多余路徑名信息的請求由其對應(yīng)的處理器來決定。對應(yīng)普通文本的核心處理器默認(rèn)會拒絕PATH_INFO 。而用于伺服腳本的處理器,比如cgi-script和isapi-isa,默認(rèn)會接受PATH_INFO 。
AcceptPathInfo指令存在的首要目的就是允許您覆蓋處理器關(guān)于是否接受PATH_INFO的默認(rèn)設(shè)置。這種覆蓋是很必要的。比如說,當(dāng)您使用了類似INCLUDES這樣的過濾器來根據(jù)PATH_INFO產(chǎn)生內(nèi)容時(shí)。核心處理器通常會拒絕這樣的請求,而您就可以用下述的配置使這樣的腳本成為可能:
Options +Includes
SetOutputFilter INCLUDES
AcceptPathInfo On
apache 2.0以上中的默認(rèn)的是沒有acceptpathinfo
從APACH2.0.30以上服務(wù)器中去掉了acceptpathinfo;如果需要的話需要在http.conf中添加AcceptPathInfo On這一條。即原來的
Options FollowSymLinks includes
AllowOverride None
改成
Options FollowSymLinks includes
AllowOverride None
AcceptPathInfo On
此指令決定了是否接受包含在某確定文件(或是某現(xiàn)有目錄的一個不存在的文件)后附加的路徑信息。此路徑信息將在腳本里以PATH_INFO環(huán)境變量的形式出現(xiàn)。
比如說,假設(shè)/test/所指向的目錄下只包括一個文件:here.html。那么對/test/here.html/more和/test/nothere.html/more的請求都會得到/more這樣的PATH_INFO變量。
AcceptPathInfo指令的三個參數(shù)為:
off
僅當(dāng)一個請求映射到一個真實(shí)存在的路徑時(shí),它才會被接受。這樣,如上述/test/here.html/more這樣的在真實(shí)文件名后跟隨一個路徑名的請求將會返回一個404 NOT FOUND錯誤。
on
如果前面的路徑映射到一個真實(shí)存在的文件,此請求將被接受。如果/test/here.html映射著一個有效的文件,上例中/test/here.html/more這個請求就會被接受。
default
對于附加路徑名的請求的處理方式由其對應(yīng)的處理器來決定。對應(yīng)普通文本的核心處理器默認(rèn)會拒絕PATH_INFO。而用于伺服腳本的處理器,比如cgi-script和isapi-isa,默認(rèn)會接受PATH_INFO。
PHP中的全局變量$_SERVER['PATH_INFO']是一個很有用的參數(shù),眾多的CMS系統(tǒng)在美化自己的URL的時(shí)候,都用到了這個參數(shù)。
對于下面這個網(wǎng)址:
http://www.test.com/index.php/foo/bar.html?c=index&m=search
我們可以得到 $_SERVER['PATH_INFO'] = ‘/foo/bar.html',而此時(shí) $_SERVER['QUERY_STRING'] = 'c=index&m=search';
通常,我們最初開始PHP程序編寫的時(shí)候,都會使用諸如: http://www.test.com/index.php?c=search&m=main 這樣的URL,這種URL不僅看起來非常奇怪,而且對于搜索引擎也是非常不友好的。很多搜索引擎收錄的時(shí)候,都會忽略Query String之后的內(nèi)容,google雖然不會忽略Query String,但是對于其他不含Query String的頁面,會給于比較高的PR值。
下面是一段解析PATH_INFO的非常簡單的代碼:
復(fù)制代碼 代碼如下:
<?php
if( !isset( $_SERVER['PATH_INFO'] ) ){
$pathinfo = 'default';
}else{
$pathinfo = explode('/', $_SERVER['PATH_INFO']);
}
if( is_array($pathinfo) AND !empty($pathinfo) ){
$page = $pathinfo[1];
}else{
$page = 'a.php';
}
require "$page.php";
?>
php文件名后加斜線“/”不能正常訪問,報(bào)not found錯誤
系統(tǒng)壞后,重裝系統(tǒng)后,配置php環(huán)境。用的軟件和以前的版本都相同。
環(huán)境配置好后,因工作項(xiàng)目都是單入口文件,index.php文件后邊加了斜線才能進(jìn)入。沒換系統(tǒng)前都可以訪問,可以排除軟件版本問題.
剛想進(jìn)入工作項(xiàng)目,就報(bào)not found 不知為何。測試后得知,php文件名后加斜線“/”不能正常訪問
詢問多人,未果。google 度娘 未果
找公司一資深php工程師
說是apache有這樣一個指令 :AcceptPathInfo
在apache的配置文件里面加上:AcceptPathInfo on 就ok了。
相關(guān)文章
PHP登錄驗(yàn)證碼的實(shí)現(xiàn)與使用方法
這篇文章主要介紹了PHP登錄驗(yàn)證碼的實(shí)現(xiàn)與使用方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了php驗(yàn)證碼圖片的生成、顯示、判斷等相關(guān)步驟與使用技巧,需要的朋友可以參考下2016-07-07
php創(chuàng)建基本身份認(rèn)證站點(diǎn)的方法詳解
本篇文章是對php創(chuàng)建基本身份認(rèn)證站點(diǎn)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php異常:Parse error: syntax error, unexpected T_ENCAPSED_AND_W
PHP會出現(xiàn)eval()'d code error 錯誤提示的原因一般都是因?yàn)槟0邋e誤,原因有以下幾種情況2011-05-05
解析php mysql 事務(wù)處理回滾操作(附實(shí)例)
其實(shí)用PHP來處理mysql的事務(wù)回滾并不難,下面小編就詳細(xì)的為大家介紹一下。相信大家看完之后都知道如何使用2013-08-08
Function eregi is deprecated (解決方法)
本篇文章是對Function eregi() is deprecated錯誤的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP轉(zhuǎn)換文件夾下所有文件編碼的實(shí)現(xiàn)代碼
本篇文章是對PHP轉(zhuǎn)換文件夾下所有文件編碼的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php實(shí)現(xiàn)文件與16進(jìn)制相互轉(zhuǎn)換的方法示例
這篇文章主要介紹了php實(shí)現(xiàn)文件與16進(jìn)制相互轉(zhuǎn)換的方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。2017-02-02

