其實這個技術出來很久很久了,早在以前自己有架設 WordPress 時發現到這東西
以往寫程式式,網址呈現的樣子大概會是這樣
http://www.bojack.net/news/index.php?newsid=10
而利用 mod_rewrite 可以讓網址做些許的改變,就像下面這二行範例一樣
http://www.bojack.net/news/10 or
http://www.bojack.net/news/10.html
至於為什麼要這麼做,就個人的感受是網址至少看起來簡潔了不少
另外 gslin 大神 的說明也指出,這樣做的話會使得系統程式較有彈性,程式若有做改變時對使用者來說也不會有太多餘影響
而最近幫單位寫了一個類似免費空間 ( Free File Hosting ) 的介面,因為同仁常因 E-mail 附件超過了限制的大小 ( ex: 20M ) 時常常向 MIS 求救
於是這個系統就這樣產生了 ~ 其中就有用到 mod_rewrite 的功能
首先要讓 Apache 支援 mod_rewrite,可以在 httpd.conf 看有沒有這一行
LoadModule rewrite_module modules/mod_rewrite.so
接下來要準備設定 mod_rewrite,原則上有二種寫法,一種是直接寫在 httpd.conf 裡面,另一種是寫在 .htaccess 裡面
若要寫在 .htaccess 也要特別注意 Apache 是否有支援,假設我的網頁是放在 /www/htdocs/freefile 底下
那麼建議在 httpd.conf 加入這些設定,Apache 預設是將 AllowOverride 設定為 None,所以在您要使用的地方先開啟它,這樣才會讓 .htaccess 生效
<Directory /www/htdocs/freefile>
AllowOverride All
Order deny,allow
Deny from all
< /Directory>
最後就是寫 .htaccess 了,範例如下
RewriteEngine On //開啟Rewrite功能
RewriteRule ^([0-9A-Za-z]+).html$ index.php?name=$1 //Rewrite規則
RewriteRule ^([0-9a-z]+)/([0-9]*)$ index.php?name=$1&id=$2 //Rewrite規則
我們再拿第一個規則出來討論,就會長成這樣
RewriteRule ^([0-9A-Za-z]+).html$ index.php?name=$1 //Rewrite規則
這是套用前跟套用後的差別
http://www.bojack.net/news/index.php?name=Abc10
http://www.bojack.net/news/Abc10.html
至於第二個規則如下,看倌自行參考
http://www.bojack.net/news/index.php?name=abc10&id=10
http://www.bojack.net/news/abc10/10
上面的這些規則其實也就是正規化表示法 ( RegularExpresson ) 的應用,可自行 Google 查一下用法
參考資料
[1] Gea-Suan Lin's BLOG - 為什麼要使用 mod_rewrite?
[2] 風和日麗 天氣晴 - Apache 的 .htaccess 失效?
[3] 小開PHP私房菜 - mod_rewrite 網址轉換
[4] Apache’s AllowOverride All doesn’t do what you think it does
留言列表