2007年9月8日

動態網址轉靜態網址 ( ReWrite的應用 )

  常看到有網站的網址類似: /mypage/3688/name.html 或像 /mypage-3688-name.html之類的網址,讓人覺得它是個HTML的靜態網頁,其實它本來很有可能是個像這樣的網址:/mypage.php?id=3688&login=name,那這樣做有什麼好處呢?

好處有:
  1. 讓URL 短一點,對使用者而言,靜態網址的接受度較高。

  2. Search Engine Robots/Spiders/Crawlers 比較吃的下去

  3. 靜態網址的 SEO/SERP 效果好(尚未證實)

  4. 減少你的 Log File / header流量的負擔,積少成多


此種作法要注意:
  1. 要注意 Session ID 的控制或 Cache-Control 等議題

  2. 一些使用者專屬個人資料的頁面,rewrite 時要注意。

  3. .htaccess 的設定


要實作此種網頁模式,可使用Apache的mod_rewrite模組來達成。

rewrite的使用方式:
  1. 使用在Apache主配置文件httpd.conf中

  2. 使用在httpd.conf裡定義的虛擬主機配置中

  3. 使用在基本目錄的跨越配置文件.htaccess中


  假如你對你的的網站內容所在的服務器沒有管理員權限,或者你的網站放在ISP的服務器上托管等等條件下,你無法改寫主配置文件,然而你可以對你的WEB站點內容所在的目錄有寫入權限,則你可以設置自己的.htaccess文件達到同樣的目的。

  但你需要確定Apache主配置文件httpd.conf中對你的網站所在的目錄定義了下面的內容,否則你的.htaccess不會工作:

  Options Indexes FollowSymLinks
  AllowOverride all

設定完記得重新啟動Apache伺服器才會生效。

  一般我們對於網站服務器的權限都不會太自由,所以在這裡我以使用配置文件.htaccess的方式來實作。

  1. 假設 Apache 的 Rewrite 已經打開(mod_rewrite)

  2. 在要實作Rewrite的網站目錄下建立名為 .htaccess 的配置檔

  3. .htaccess 配置檔的內容如下:

    RewriteEngine On
    RewriteRule ^mypage/([0-9]+)/([a-z]+)\.html$ mypage.php?id=$1&login=$2

  如此就可以/mypage/3688/name.html 這樣的網址來執行 /mypage.php?id=3688&login=name 了。