《PHP學(xué)習(xí):PHP實(shí)現(xiàn)偽靜態(tài)方法匯總》要點(diǎn):
本文介紹了PHP學(xué)習(xí):PHP實(shí)現(xiàn)偽靜態(tài)方法匯總,希望對您有用。如果有疑問,可以聯(lián)系我們。
PHP偽靜態(tài)的使用主要是為了隱藏傳遞的參數(shù)名,下面給大家介紹php實(shí)現(xiàn)偽靜態(tài)的方法,具體詳情請看下文.
說起偽靜態(tài)的實(shí)現(xiàn)方案,你是不是很爽快的回答"簡單,配置下apache的重寫規(guī)則就行了嘛"
PHP應(yīng)用
但是你有沒有發(fā)現(xiàn)這種情況,你最近弄了很多新功能,每天上幾個(gè)新功能,每天都有好多偽靜態(tài)配置,才開始兩天運(yùn)維同學(xué)還樂意配合,過兩天運(yùn)維同學(xué)就要罵了.你麻痹,腦殘為什么不一次搞完,天天麻煩我.但是了,你要上線啊,不得不苦逼的求運(yùn)維同學(xué)了,然后說出一句程序猿界最不要臉的話"這次最后一次改動(dòng)了",然后后面又要改,哎,你的人格算是掃地了...
PHP應(yīng)用
如果有這樣的煩惱存在,請看下面的文章,保證你以后再也不求運(yùn)維了,想干啥就干啥...PHP應(yīng)用
那PHP實(shí)現(xiàn)偽靜態(tài)有多少種方法了?個(gè)人見解和統(tǒng)計(jì)奧,有四種方法
PHP應(yīng)用
1、使用apache的URL重寫規(guī)則,這個(gè)大家都懂,在apache里面配置, 這里同學(xué)們都造,只列舉一段簡單的配置
PHP應(yīng)用
RewriteEngine On
RewriteRule ^/test.html index.php?controller=index&action=test [L]
PHP應(yīng)用
2、使用PHP的pathinfo , 你是不是有看到有的網(wǎng)站這樣玩'www.xxx.com/index.php/c/index/a/test/id/100' , 當(dāng)然要支持這種你需要把'php.ini' 中的參數(shù)
PHP應(yīng)用
'cgi.fix_pathinfo' 設(shè)置為1.拿'www.xxx.com/index.php/c/index/a/test/id/100'來舉例
PHP應(yīng)用
echo $_SERVER['PATH_INFO']; //輸出'/c/index/a/test/id/100'
到這,應(yīng)該明白了吧,你再對這段進(jìn)行解析,分配實(shí)際地址
PHP應(yīng)用
3、使用404機(jī)制,一般情況下偽靜態(tài)都是實(shí)際不存在的頁面,因此可以使用apache 404配置,但是有些問題,就是'post'類型的哀求會(huì)被拋棄,導(dǎo)致你無法獲取'$_POST',
PHP應(yīng)用
但是'$_GET'仍然可以獲取, 假設(shè)此處404頁面為'404page.php', apache 配置如下:
PHP應(yīng)用
ErrorDocument 404 /404page.phpPHP應(yīng)用
然后在 '404page.php'中嵌入如下代碼PHP應(yīng)用
header("HTTP/1.1 200 OK"); //這里一定要有,不然狀態(tài)就是404 $reqUrl = $_SERVER['REQUEST_URI']; // 哀求地址 /** * 從URL中解析參數(shù) */ function parseUrlParams($queryUrl) { $arr = explode('?', $queryUrl); parse_str($arr[1], $param); if($param) { foreach($param as $key => $value) { $_GET[$key] = $value; } } } parseUrlParams($reqUrl); // url解析參數(shù) //然后你就可以使用 $reqUrl 根據(jù)自己的規(guī)則匹配不同的實(shí)際哀求地址 if(preg_match('#^/test.html#is', $reqUrl, $matches)) { include('index.php'); die(); }
4、方法3的改進(jìn)型,方法3在apache內(nèi)部機(jī)制相當(dāng)于重定向了,導(dǎo)致post(get)傳遞的參數(shù)無法獲取.分析上面的其實(shí)是找不到相關(guān)文件,那當(dāng)服務(wù)器找不到相關(guān)文件時(shí),我們?yōu)樗付ㄒ粋€(gè)文件,不就OK了,它就不用跳轉(zhuǎn)了,這時(shí)POST之類都不會(huì)丟失.apache 配置如下:
PHP應(yīng)用
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.phpPHP應(yīng)用
上面一段配置的大概意思是 當(dāng)哀求的文件或者目錄無法找到時(shí) 使用根目錄下的 'index.php' 替代,那這時(shí)你就可以在'index.php'中獲取相關(guān)參數(shù)并解析到實(shí)際哀求地址PHP應(yīng)用
/** * 獲取當(dāng)前哀求的URI地址 *@param void *@author painsOnline *@return string URI */ function getReqUri() { return trim($_SERVER["REQUEST_URI"]); } $reqUri = getReqUri(); if(preg_match('/^\/test.html/isU', $reqUri)) {//解析哀求地址 include 'test.php'; exit(); }
以上內(nèi)容給大家介紹了php實(shí)現(xiàn)偽靜態(tài)的方法,希望對大家有所幫助.PHP應(yīng)用
維易PHP培訓(xùn)學(xué)院每天發(fā)布《PHP學(xué)習(xí):PHP實(shí)現(xiàn)偽靜態(tài)方法匯總》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/7735.html