LENDIEN聯電 冷暖 清淨 除溼 移動式空調 9000BTU任天堂-Switch-NS-公司貨主機-豪華全配組LG樂金 WIFI遠控雙眼小精靈掃地清潔機器人變頻版

2011年4月13日 星期三

apache轉址:RedirectMatch跟RewriteRule

前幾天找了一下apache轉址的方法,一開始找到RedirectMatch
使用方式很簡單,改httpd.conf,把要改的那個VirtualHost tag裡加上RedirectMatch 規則 目的就好了
像是固定要把/12345/abcde轉到/my.php?i=12345&n=abcde
設定裡就要下RedirectMatch ^/(\d{5})/([a-z]{5,10}) /my.php?i=$1&n=$2
規則可以用標準表示式設定,小括是重點,影嚮到後面$1,$2的使用,前面有括後面才能用$n的方式叫回來

改好後重新啟動apache服務就行了,很順利的一次搞定。

可是後來發現用這種方式導過去後,頁面上方的網址會是my.php?i=xxooxxoo這樣,不美麗
後來又找到RewriteRule,使用上跟RedirectMatch很相似,但是用法更靈活,只要把上面的RedirectMatch改成RewriteRule,然後在這一行的上面加一條Rewriteengine on,一樣重啟apache後基本上就可以了
用這種方式導到正確頁面後,網址不會被改掉,相當完美相當滿意

但是!!Rewrite要注意的是,因為網址不會被改掉,所以有時候會發生頁面上有些圖片、css、javascript、超連結等呼喚其他檔案的地方都中邪貌失效了,原因就是本來程式裡用相對路徑的寫法這時候會找不到啊!所以如果一開始沒用絕對路徑,這時候改起來就會很痛苦

雖然很開心的找到我要的rewriterule,不過我終究因為上面說的「改起來很痛苦」而改回redirectmatch……對於rewriterule的語法就沒有再深入去研究了,有興趣的人可以看看rewriterule的介紹

沒有留言:

張貼留言