日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Apache的Mod_rewrite如何用RewriteRule重寫規(guī)則

一條RewriteRule指令,定義一條重寫規(guī)則,規(guī)則間的順序非常重要 。對Apache1.2及以后的版本,模板(pattern)是一個POSIX正則式,用以匹配當前的URL 。當前的URL不一定是用記最初提交的URL,因為可能用一些規(guī)則在此規(guī)則前已經(jīng)對URL進行了處理 。
對mod_rewrite來說,!是個合法的模板前綴,表示“非的意思,這對描述“不滿足某種匹配條件的情況非常方便,或用作最后一條默認規(guī)則 。當使用!時,不能在模板中有分組的通配符,也不能做后向引用 。
當匹配成功后,Substitution會被用來替換相應的匹配,它除了可以是普通的字符串以外,還可以包括:
1. $N,引用RewriteRule模板中匹配的相關字串,N表示序號,N=0..9
2. %N,引用最后一個RewriteCond模板中匹配的數(shù)據(jù),N表示序號
3. %{VARNAME},服務器變量
4. ${mapname:key|default},映射函數(shù)調用
這些特殊內容的擴展,按上述順序進行 。
一個URL的全部相關部分都會被Substitution替換,而且這個替換過程會一直持續(xù)到所有的規(guī)則都被執(zhí)行完,除非明確地用L標志中斷處理過程 。
當susbstitution有-前綴時,表示不進行替換,只做匹配檢查 。
利用RewriteRule,可定義含有請求串(Query String)的URL,此時只需在Sustitution中加入一個?,表示此后的內容放入QUERY_STRING變量中 。如果要清空一個QUERY_STRING變量,只需要以?結束Substitution串即可 。
如果給一個Substitution增加一個http://thishost[:port]的前綴,則mod_rewrite會自動將此前綴去掉 。因此,利用http://thisthost做一個無條件的重定向到自己,將難以奏效 。要實現(xiàn)這種效果,必須使用R標志 。
Flags是可選參數(shù),當有多個標志同時出現(xiàn)時,彼此間以逗號分隔 。
1. "redirect|R [=code]" (強制重定向)
給當前的URI增加前綴http://thishost[:thisport]/,從而生成一個新的URL,強制生成一個外部重定向(external redirection,指生的URL發(fā)送到客戶端,由客戶端再次以新的URL發(fā)出請求,雖然新URL仍指向當前的服務器). 如果沒有指定的code值,則HTTP應答以狀態(tài)值302 (MOVED TEMPORARILY),如果想使用300-400(不含400)間的其它值可以通過在code的位置以相應的數(shù)字指定,也可以用標志名指定: temp (默認值), permanent, seeother.
注意,當使用這個標志時,要確實substitution是個合法的URL,這個標志只是在URL前增加http://thishost[:thisport]/前綴而已,重寫操作會繼續(xù)進行 。如果要立即將新URL重定向,用L標志來中重寫流程 。
2. "forbidden|F" (強制禁止訪問URL所指的資源)
立即返回狀態(tài)值403 (FORBIDDEN)的應答包 。將這個標志與合適的RewriteConds 聯(lián)合使用,可以阻斷訪問某些URL 。
3. "gone|G" (強制返回URL所指資源為不存在(gone))
立即返回狀態(tài)值410 (GONE)的應答包 。用這個標志來標記URL所指的資源永久消失了.
4. # "proxy|P" (強制將當前URL送往代理模塊(proxy module))
這個標志,強制將substitution當作一個發(fā)向代理模塊的請求,并立即將共送往代理模塊 。因此,必須確保substitution串是一個合法的URI (如, 典型的情況是以http://hostname開頭),否則會從代理模塊得到一個錯誤. 這個標志,是ProxyPass指令的一個更強勁的實現(xiàn),將遠程請求(remote stuff)映射到本地服務器的名字空間(namespace)中來 。
5. "last|L" (最后一條規(guī)則)
中止重寫流程,不再對當前URL施加更多的重寫規(guī)則 。這相當于perl的last命令或C的break命令 。
6. "next|N" (下一輪)
重新從第一條重寫規(guī)則開始執(zhí)行重寫過程,新開的過程中的URL不應當與最初的URL相同 。這相當于Perl的next命令或C的continue命令. 千萬小心不要產(chǎn)生死循環(huán) 。

推薦閱讀