生活就像一個圈,來來回回…
Posts tagged Apache
RewriteRule選項
四月 22nd
“redirect|R[=code]” 強制重定向。經常引用到觸發可見的定向。默認情況下它是一個HTTP 302的臨時重定向,但是你可以注明具體的HTTP 代碼,比如你可以用[R=301]來表明這是一個永久重定向,這對搜索引擎抓取你重定向后的網頁相當有用。
“proxy|P” 強制為代理
“forbidden|F” 403 禁止。告訴Apache響應請求時不提供頁面。其原理就是Apache會發出一個403 HTTP相應,可以保護網站不被未經授權的或者其他盜鏈訪問。
“nocase|NC” 忽略正則表達式中的大小寫。它經常被用到{HTTP_HOST}服務器參數上,因為域名里面是不會區分大小寫的。
“next|N” 回到第一條規則。可以讓你的重寫條件循環匹配,當你不知道{REQUEST_URI}有多少字符進行匹配的時候很有用。
“last|L” 最后一個規則。告訴Apache服務器一系列的條件或者是規則將在它出現后結束,換句話說就是[L]不出現,mod_rewrite將會一直執行。
“noescape|NE” 在輸出中不對URI作轉義。此標記阻止mod_rewrite對重寫結果應用常規的URI轉義規則。 一般情況下,特殊字符(如‘%’, ‘$’, ‘;’等)會被轉義為等值的十六進制編碼。 此標記可以阻止這樣的轉義,以允許百分號等符號出現在輸出中,如:
RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
可以使‘/foo/zed’轉向到一個安全的請求‘/bar?arg=P1=zed’.
“skip|S=N” 跳過下面的N條規則。
Mod Rewrite 推薦資源
四月 18th
正則表達式工具firefox擴展:Regular Expressions Tester
正則表Introduction to the Tutorial:
http://gnosis.cx/publish/programming/regular_expressions.html
Apache文檔之mod_rewrite介紹:
http://www.uplinux.com/download/doc/apache/ApacheManual/mod/mod_rewrite.html
RewriteCond指令
四月 4th
RewriteCond TestString CondPattern [Flags]
RewriteCond指令定義了一個規則的條件,即在一個RewriteRule指令之前有一個或多個RewriteCond指令。 條件之后的重寫規則僅在當前URI與pattern匹配并且符合這些條件的時候才會起作用。
RewriteCond也有反向引用,但和RewriteRule中用$N引用不同,它使用%N反向引用。
RewriteCond引用Apache變量%{NAME_OF_VARIABLE},如%{HTTP_HOST}。
RewriteCond的條件模式(CondPattern)除了使用perl樣式正則表達式,還有額外的規則:
1. 使用‘!’ 字符(驚嘆號)來實現匹配的反轉
2. ‘,=。
3. ‘-d’ (是一個目錄[directory])。將TestString視為一個路徑名并測試它是否存在而且是一個目錄.
4. ‘-f’ (是一個常規的文件[file])。將TestString視為一個路徑名并測試它是否存在而且是一個常規的文件.
5. ‘-s’ (是一個非空的常規文件[size])。將TestString視為一個路徑名并測試它是否存在而且是一個尺寸大于0的常規的文件.
6. ‘-l’ (是一個符號連接[link])。將TestString視為一個路徑名并測試它是否存在而且是一個符號連接.
7. ‘-F’ (對子請求有效的業已存在的文件)。測試TestString是否一個有效的文件, 而且可以被服務器當前已經配置的所有存取控制所存取。 它用一個內部子請求來做判斷,由于會降低服務器的性能,請小心使用!
RewriteRule指令
三月 26th
RewriteRule Pattern Substitution [Flags]
在模式(Pattern)和替換(Substitution)中使用正則表達式來匹配相應的字符。
譬如有如下的URL:
http://www.example.com/display.php?country=USA&state=California&city=San_Diego
REQUEST_URI的值是“/country=USA &state=California&city=San_Diego”,要將國家州城市信息更友好的顯示給用,要顯示成這樣:
開啟mod_rewrite模塊
三月 23rd
使用URL重寫功能,需要安裝mod_rewrite模塊。使用phpinfo()函數,找到Apache Modules section部分,可以看到當前apache加載模塊。
如果沒有開啟mod_rewrite, 就需要配置mod_rewrite.so的路徑:
LoadModule rewrite_module modules/mod_rewrite.so
Apache2內置了mod_rewirte,在配置虛擬主機的配置文件VirtualHost部分打開引擎:RewriteEngine on
這句之后就可以使用重寫語法了。
VirtualHost文件部分的Directory配置必須是:
Options Includes FollowSymLinks #允許使用符號鏈接
AllowOverride All #允許目錄配置文件.htaccess。如果不使用是AllowOverride None
利用mod_rewrite重寫URL主要使用兩個基本的指令RewriteRule和RewriteCond。
URL Rewrite mod_rewrite Notes
三月 20th
Rewirte主要的功能就是實現URL的跳轉,它的正則表達式是基于Perl 語言。可基于服務器級的(httpd.conf)和目錄級的 (.htaccess)兩種方式。如果要想用到rewrite模塊,必須先安裝或加載rewrite模塊。方法有兩種一種是編譯apache的時候就直接安裝rewrite模塊,別一種是編譯apache時以DSO模式安裝apache,然后再利用源碼和apxs來安裝rewrite模塊。
基于服務器級的(httpd.conf)有兩種方法,一種是在httpd.conf的全局下直接利用RewriteEngine on來打開rewrite功能;另一種是在局部里利用RewriteEngine on來打開rewrite功能,下面將會舉例說明,需要注意的是,必須在每個virtualhost里用RewriteEngine on來打開rewrite功能。否則virtualhost里沒有RewriteEngine on它里面的規則也不會生效。
基于目錄級的(.htaccess),要注意一點那就是必須打開此目錄的FollowSymLinks屬性且在.htaccess里要聲明 RewriteEngine on。
More >