PHP怎么實現偽靜態?

2017-04-17 1305 8 編輯:深圳網站建設 來源:互聯網

PHP怎么實現偽靜態?

PHP偽靜態的使用主要是為了隱藏傳遞的參數名,下面給大家介紹php實現偽靜態的方法,具體詳情請看下文。

說起偽靜態的實現方案,你是不是很爽快的回答"簡單,配置下apache的重寫規則就行了"

那PHP實現偽靜態有多少種方法了?,有四種方法

1、使用apache的URL重寫規則,這個大家都懂,在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機制,一般情況下偽靜態都是實際不存在的頁面,因此可以使用apache 404配置,但是有些問題,就是'post'類型的請求會被拋棄,導致你無法獲取'$_POST',

但是'$_GET'仍然可以獲取, 假設此處404頁面為'404page.php', apache 配置如下:

ErrorDocument 404 /404page.php

然后在 '404page.php'中嵌入如下代碼

?123456789101112131415161718192021222324 header("HTTP/1.1 200 OK"); //這里一定要有,不然狀態就是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 根據自己的規則匹配不同的實際請求地址 if(preg_match('#^/test.html#is', $reqUrl, $matches)) { include('index.php'); die(); } 

4、方法3的改進型,方法3在apache內部機制相當于重定向了,導致post(get)傳遞的參數無法獲取。分析上面的其實是找不到相關文件,那當服務器找不到相關文件時,我們為它指定一個文件,不就OK了,它就不用跳轉了,這時POST之類都不會丟失。apache 配置如下:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.php

上面一段配置的大概意思是 當請求的文件或者目錄無法找到時 使用根目錄下的 'index.php' 替代,那這時你就可以在'index.php'中獲取相關參數并解析到實際請求地址

?12345678910111213141516 /** * 獲取當前請求的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(); } 

專業的網站建設公司,深正互聯,如您有網站營銷需求,請您關注我們,或者致電13828884598

本站文章均為深正網站建設摘自權威資料,書籍,或網絡原創文章,如有版權糾紛或者違規問題,請即刻聯系我們刪除,我們歡迎您分享,引用和轉載,但謝絕直接搬磚和抄襲!感謝...
關注深正互聯
七星彩头尾