2008年4月24日 星期四

[野人獻曝]Apache上的Mod_rewrite的實作說明(上)

Rewrite

最近不小心沉迷在研究Apache的mod_rewrite,
剛好也有點心得,
所以寫篇簡單心得放在這裡吧。

其實一切都是因為我從Cakephp裡的.htaccess得到一些靈感開始的,
所以我就以Cakephp的rewrite方法來作點說明吧!

首先看到Cakephp根目錄下的.htaccess檔吧:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>


第一行和最後一行基本上算是必備,
所以不用問太多加下去就對了XD

第二行開始,代表著你要啟用RewriteEngine的功能,
這一行必加,因為不加的話,你也不會知道為啥你的rewrite無效~

第三、四行則代表要把所有的Request導向給app/webroot,
換言之,Cakephp根目錄下的index.php基本上是擺好玩的!

既然前面提到已經被導向至app/webroot了,
那麼就繼續看app/webroot/.htaccess的內容吧:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>


第一行、第二行和最後一行內容跟前段相同,所以就不多說了,
比較有意思的是第三、四、五行。
其意義如下:

  • RewriteCond %{REQUEST_FILENAME} !-d
    意義:任何附掛的字串都不會被視為一個目錄
    比如你輸入http://localhost/cakephp/a/s/d,(cakephp是你放cakephp檔案的目錄)
    那麼rewrite將會把a/s/d當成一般字串,而不會繼續去尋找cakephp下是不是有目錄a、目錄s。


  • RewriteCond %{REQUEST_FILENAME} !-f
    意義:任何附掛的字串都不會被視為一個檔案
    比如你輸入http://localhost/cakephp/a/s/d.css,(cakephp是你放cakephp檔案的目錄)
    那麼rewrite將會把a/s/d當成一般字串,而不會繼續去尋找cakephp下是不是有目錄a、目錄s、或是檔案d.css。

  • RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
    以上所提到的附掛字串都被當成一個參數,其名稱為url,
    指派給這個目錄下的index.php(就是app/webroot/index.php啦)處理。
    注意後面的[QSA,L],
    QSA(Querystring appedned)代表著要附掛Querystring給index.php,
    至於L(Last)代表最後一條rewrite規則。

2008年4月16日 星期三

[無題][紀錄]

Javascript:Appjet
Ruby on Rails:Heroku
Python:Google App Engine
PHP:?
Perl:?
ASP.NET:?
JSP/Servlet:?

2008年4月9日 星期三

[野人獻曝][小工具]Google Blogsearch的搜尋結果Widget

其實這東西從去年就開始寫了,
不過因為我的懶病發作,
所以只寫了幾行就放在硬碟裡生灰塵。

昨天一時心血來潮,
檢查我的垃圾程式堆時總算發現這個玩意,
因此花了一段時間把她弄出一個雛型出來。

效果在本部落格右手側即可看到。

嗯......其他的就先不說了!
要試用的請到:http://lab.faryne.tw/blogsearch/領取程式碼,
然後放在你要放的地方即可。

對了,如果有人願意把我弄一下版面的話,
我會很高興滴~

Technorati 标签: ,