2009年5月20日 星期三

apache 的 rewrite

本篇文章節錄自Apache 重寫規則的常見應用 (rewrite)

主要記錄一下怎麼針對 *.host.com 去做 rewrite的動作


若今天要轉換www.username.domain.com的請求
到www.domain.com/username

對HTTP/1.1的請求包括一個Host: HTTP頭,我們能用下面的規則集重寫
http://www.username.domain.com/anypath 到 /home/username/anypath

Rewriteengine on
rewritecond %{HTTP_HOST} ^www\.[^.]+\.host\.com$
rewriterule ^(.+) %{HTTP_HOST}$1 [C]
rewriterule ^www\.([^.]+)\.host\.com(.*) /home/$1$2

這裡的 $1 $2 基本上就是對應前面的 ( ) 內的東西
例:$1 = username , $2 = /anypath

注:
rewritecond 條件重寫規則,當滿足上面定義的條件才會應用下面的重寫規則,
rewritecond 另有各種變量,請查閱相關文檔。

另外,可以開啟rewrite的log記錄來看一下是不是轉到莫名其妙的地方去了
可以查看:
http://w.yi.org/ftp/FAPM/apache/Apache2/zh/mod/mod_rewrite.html#rewriteloglevel
或直接加入下面二行

RewriteLog "/var/log/httpd/rewrite.log"
RewriteLogLevel 3


注意:
RewriteLogLevel指令設置重寫引擎日誌的詳細程度的級別。 默認級別0意味著不記錄,而9或更大的值意味著記錄所有的操作。

要關閉重寫引擎日誌,可以簡單地設此值為0,關閉所有的重寫操作記錄。

使用較高的Level值會使Apache服務器速度急劇下降! 重寫日誌使用大於2的Level值只用於調試!

沒有留言: