PHP實現偽靜態(tài)方法匯總
PHP偽靜態(tài)的使用主要是為了隱藏傳遞的參數名,下面給大家介紹php實現偽靜態(tài)的方法,具體詳情請看下文。
說起偽靜態(tài)的實現方案,你是不是很爽快的回答"簡單,配置下apache的重寫規(guī)則就行了嘛"
但是你有沒有發(fā)現這種情況,你最近弄了很多新功能,每天上幾個新功能,每天都有好多偽靜態(tài)配置,才開始兩天運維同學還樂意配合,過兩天運維同學就要罵了。你麻痹,腦殘為什么不一次搞完,天天麻煩我。但是了,你要上線啊,不得不苦逼的求運維同學了,然后說出一句程序猿界最不要臉的話"這次最后一次改動了",然后后面又要改,哎,你的人格算是掃地了。。。
如果有這樣的煩惱存在,請看下面的文章,保證你以后再也不求運維了,想干啥就干啥。。。
那PHP實現偽靜態(tài)有多少種方法了?個人見解和統(tǒng)計奧,有四種方法
1、使用apache的URL重寫規(guī)則,這個大家都懂,在apache里面配置, 這里同學們都造,只列舉一段簡單的配置
RewriteEngine On
RewriteRule ^/test.html index.php?controller=index&action=test [L]
2、使用PHP的pathinfo , 你是不是有看到有的網站這樣玩'www.xxx.com/index.php/c/index/a/test/id/100' , 當然要支持這種你需要把'php.ini' 中的參數
'cgi.fix_pathinfo' 設置為1。拿'www.xxx.com/index.php/c/index/a/test/id/100'來舉例
echo $_SERVER['PATH_INFO']; //輸出'/c/index/a/test/id/100'
到這,應該明白了吧,你再對這段進行解析,分配實際地址
3、使用404機制,一般情況下偽靜態(tài)都是實際不存在的頁面,因此可以使用apache 404配置,但是有些問題,就是'post'類型的請求會被拋棄,導致你無法獲取'$_POST',
但是'$_GET'仍然可以獲取, 假設此處404頁面為'404page.php', apache 配置如下:
ErrorDocument 404 /404page.php
然后在 '404page.php'中嵌入如下代碼
header("HTTP/1.1 200 OK"); //這里一定要有,不然狀態(tài)就是404 $reqUrl = $_SERVER['REQUEST_URI']; // 請求地址 /** * 從URL中解析參數 */ function parseUrlParams($queryUrl) { $arr = explode('?', $queryUrl); parse_str($arr[1], $param); if($param) { foreach($param as $key => $value) { $_GET[$key] = $value; } } } parseUrlParams($reqUrl); // url解析參數 //然后你就可以使用 $reqUrl 根據自己的規(guī)則匹配不同的實際請求地址 if(preg_match('#^/test.html#is', $reqUrl, $matches)) { include('index.php'); die(); }
4、方法3的改進型,方法3在apache內部機制相當于重定向了,導致post(get)傳遞的參數無法獲取。分析上面的其實是找不到相關文件,那當服務器找不到相關文件時,我們?yōu)樗付ㄒ粋€文件,不就OK了,它就不用跳轉了,這時POST之類都不會丟失。apache 配置如下:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
上面一段配置的大概意思是 當請求的文件或者目錄無法找到時 使用根目錄下的 'index.php' 替代,那這時你就可以在'index.php'中獲取相關參數并解析到實際請求地址
/** * 獲取當前請求的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(); }
以上內容給大家介紹了php實現偽靜態(tài)的方法,希望對大家有所幫助。
- 詳談php靜態(tài)方法及普通方法的區(qū)別
- php面向對象中static靜態(tài)屬性和靜態(tài)方法的調用
- 淺析php靜態(tài)方法與非靜態(tài)方法的用法區(qū)別
- php中類和對象:靜態(tài)屬性、靜態(tài)方法
- PHP使用靜態(tài)方法的幾個注意事項
- 淺談PHP中靜態(tài)方法和非靜態(tài)方法的相互調用
- PHP靜態(tài)調用非靜態(tài)方法的應用分析
- php 靜態(tài)屬性和靜態(tài)方法區(qū)別詳解
- PHP靜態(tài)方法和靜態(tài)屬性及常量屬性的區(qū)別與介紹
- php之static靜態(tài)屬性與靜態(tài)方法實例分析
- PHP的靜態(tài)方法與普通方法用法實例分析
相關文章
phpstorm遠程連接服務器并實時更新發(fā)布代碼(thinkphp6.0.7)
這篇文章主要介紹了phpstorm遠程連接服務器并實時更新發(fā)布代碼(thinkphp6.0.7),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03ThinkPHP控制器里javascript代碼不能執(zhí)行的解決方法
這篇文章主要介紹了ThinkPHP控制器里javascript代碼不能執(zhí)行的解決方法,采用ThinkPHP的<literal>標簽來解決javascript標簽被解析的問題,是非常實用的技巧,需要的朋友可以參考下2014-11-11