其實這個技術出來很久很久了,早在以前自己有架設 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

arrow
arrow
    全站熱搜

    Bojack 發表在 痞客邦 留言(0) 人氣()