(轉)透過URL Rewrite實現連結靜態化(PHP)

來源:互聯網
上載者:User
(轉)通過URL Rewrite實現連結靜態化(PHP)
我們知道搜尋引擎對於靜態頁面是非常友好的,因此很多網站通過產生靜態頁面等手段方便爬蟲抓取自己網站的內容。但是有時候一些應用並不適合全部靜態化,比如資料變化非常大的論壇/貼吧系統,這時候我們可以通過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 [L]然後在shell裡執行service httpdreload,讓Apache重新載入配置就好了。現在在PHP頁面裡面我們可以把連結寫成abc/a/1.html的形式,Apache在解析這個URL的時候會rewrite成abc.php?action=a&id=1的形式,並返回正確的頁面。運用Regex我們可以實現幾乎任何我們想要的連結形式,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種方法只是變通,不得已而為之,要修改連結形式很不方便也不靈活。
歡迎大家一起交流討論!
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.