Apache-Url-Rewriting


相信有不少寫PHP程式的人會有跟我一樣的困擾,那就是使用 $_POST 或 $_GET 的時候

所寫出來的網址都像這樣:

http://aidec.tw/look.php?action=8&post=5 (此網址是瞎掰的)

這樣結構的網址實在是對SEO沒啥幫助且對讀者來說也十分的不好記

因此許多人會利用Apache的 URL-Rewriting 來重新寫網址結構

但是筆者發現到從搜尋引擎中關於URL重寫的文章,很多都不知道在寫甚麼不然就是出現語法根本不能用的情形

因此在筆者從眾多的文章中一一的測試,終於讓我測試出來了(感動…)

若您也是跟我一樣有此困難的話,那就參考下面的文章吧(高手請無視…)

首先 創建一個 .htaccess 的文件 或者是修改 .htaccess文件

假設原本網址只有一個參數如下:

http://aidec.tw/look.php?action=a

則在文件中加入

 

RewriteEngine On

RewriteRule ^([a-z]+)\.html$ look.php?action=$1 [L,NC]

修改後的網址,會變成

http://aidec.tw/a.html


 

若假如原本網址有兩個參數:

http://aidec.tw/look.php?action=1&post=艾德克工作室

則在文件中加入

RewriteEngine On

RewriteRule ^([0-9]+)-(.*)\.html$ look.php?action=$1&post=$2 [L,NC]

 

修改後的網址,會變成

http://aidec.tw/1-艾德克工作室.html


說明:

RewriteEngine On :將重寫引擎設為 On

RewriteRule:重寫網址規則

([0-9]+): 表示參數值為數字

([a-z]+): 表示參數值為英文

(.*) : 表示參數萬用字元(可接受中文字)

以下方範例網址來說:

http://aidec.tw/look.php?action=1&post=艾德克工作室

RewriteRule ^([0-9]+)-(.*)\.html$ look.php?action=$1&post=$2 [L,NC]

action=$1 對應 ([0-9]+)

post=$2 對應 (.*)


最後面的參數解釋

[NC] (不分字母大小寫)

[NE] (不再輸出轉義特殊字符)

[OR] (或者, 用來與下一規則連結用)

[R]   重新導向
[F]   重新導向到 403 forbidden 頁面

[G]   重新導向到 410 forbidden 頁面

[P]   強制使用代理

[N] 重新從第一條規則開始運行

[L]   表示這是最後一條規則


RewriteRule規則表示式:
.           任何單一字母
?           0個或是1個字母
*           0個或是N個字母
+          1個或是N個字母
^          表示一行的開始
$           表示一行的結束
\            跳脫字元(顯示符號本身)

感謝您的閱讀,請用力地分享讓大家知道吧~~

Aidec Li
學我所見,寫我所學。凡事略懂略懂~~
更多 Aidec Li 的文章...

很抱歉,此文章關閉留言