程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> php實現偽靜態化頁面的兩種方法

php實現偽靜態化頁面的兩種方法

編輯:PHP基礎知識
 

方法一:
在你的程序初始化時使用如下代碼:
<?php
$Php2Html_FileUrl = $_SERVER["REQUEST_URI"];
$Php2Html_UrlString = str_replace("/", "", strrchr($Php2Html_FileUrl, "/"));
$Php2Html_UrlQueryStrList = explode("@", $Php2Html_UrlString);
foreach($Php2Html_UrlQueryStrList as $Php2Html_UrlQueryStr)
{
$Php2Html_TmpArray = explode("|", $Php2Html_UrlQueryStr);
$_GET[$Php2Html_TmpArray[0]] = $Php2Html_TmpArray[1];
}
echo '假靜態:$_GET變量<br />';
print_r($_GET);
?>
然後php中調用$_GET變量就像平常一樣了。
連接使用方式:
****.php/param1|1234@param2|4321
和****.php?param1=1234&param2=4321一樣。
方法二:通過URL Rewrite實現鏈接靜態化
我們知道搜索引擎對於靜態頁面是非常友好的,因此很多網站通過生成靜態頁面等手段方便爬蟲抓取自己網站的內容。但是有時候一些應用並不適合全部靜態化,比如數據變化非常大的論壇/貼吧系統,這時候我們可以通過URL重寫來實現鏈接的偽靜態化,即網站對外使用靜態化的鏈接,而內部實際上仍然使用動態頁面的 URL形式。比如像這樣一個鏈接:http://www.ci123.com/abc.php?action=a&id=1,我們可以改寫成http://www.ci123.com/abc/a/1.html的形式。這是搜索引擎優化最重要的內容之一,它還有一個額外的好處,可以使頁面有一個永久鏈接,即便以後網站系統內部鏈接有變化,通過適當改變Rewrite規則就可以保證原先的外部URL一直有效。
下面介紹2種簡單的Apache+PHP下實現URL重寫的方法,第一種適合有服務器配置權限的用戶,第二種適合租用空間的用戶,也作為我近期的學習心得的整理。
1、對於有服務器配置權限的用戶,推薦使用Apache的mod_rewrite模塊,這裡假設已經安裝好mod_rewrite模塊。打開Apache的配置文件,找到相應主機的部分,添加以下代碼:
RewriteEngine On
RewriteRule ^/abc/([a-z]+)/([0-9]+).html$ /abc.php?action=$1&id=$2
然後在shell裡執行service httpd reload,讓Apache重新載入配置就好了。現在在PHP頁面裡面我們可以把鏈接寫成 abc/a/1.html的形式,Apache在解析這個 URL的時候會rewrite成abc.php?action=a&ampid=1的形式,並返回正確的頁面。運用正則表達式我們可以實現幾乎任何我們想要的鏈接形式,mod_rewrite模塊的功能異常強大,這裡只是一個及其簡單的應用。
2、對於租用空間的用戶,一般都沒有辦法修改Apache的配置,這裡有個變通的方法,原理是這樣的:當要傳遞參數訪問PHP 頁面時,正常情況下是通過自動全局變量$_GET來獲得,比如上面的鏈接,在頁面裡可以通過$_GET['action'] 和 $_GET['id'] 來獲得,重寫URL後就不行了。現在在每個頁面裡require一個url_rewrite.php文件,裡面代碼如下:
$filename = basename($_SERVER['SCRIPT_NAME']);
if (strtolower($filename) == "abc.php"){
  if (!empty($_GET[id])){
    $id = intval($_GET[id]);
    $action = intval($_GET[action]);
  }
  else {
    $nav = $_SERVER["REQUEST_URI"];
    $script = $_SERVER["SCRIPT_NAME"];
    $nav = ereg_replace("^$script", "", urldecode($nav));
    $vars = explode("/", $nav);
    $action = intval($vars[1]);
    $id = intval($vars[2]);
   }
}
這樣$action和$id也得到了,頁面裡鏈接可以寫成abc.php/a/1的形式來訪問相應頁面。
需要注意的是這種方法效率較第一種低,第一種方法是在WEB服務器URL解析過程中實現的,而這裡是在PHP頁面解析過程裡實現的,第2種方法只是變通,不得已而為之,要修改鏈接形式很不方便也不靈活。


在搜索的時候也發現了另外一種“投機取巧”的方法:

用rewrite做的靜態頁面實際不存在,iisewrite又不穩定經常404,於是就有了這篇文章。

原理:404頁面類型用PHP(Asp也可以),結合小偷,實現頁面靜態化

用discuz!論壇archiver舉例:
404程序頁面:http://bbs.pkxp.com/error.php
演示:http://bbs.pkxp.com/archiver/
error.php源碼:

<?php
$url = $_SERVER['QUERY_STRING'];
$url = str_replace("404;","",$url);
if (!ereg ('archiver', $url))
echo "404錯誤";
//404錯誤頁面顯示內容
else {
$url = str_replace("archiver/","archiver/?",$url);
$str = file("$url");
$count = count($str);
for ($i=0;$i<$count;$i++){
$file .= $str[$i];
}
echo $file;
//實現archiver/?xx.html 變成archiver/xx.html
}
?>

 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved