人妻丰满熟妇AV无码片,岛国AV无码免费无禁网站,丰满岳乱妇一区二区三区,男插女高潮一区二区

RE:apache url重寫(RewriteCond|RewriteRule)詳解

技術(shù)分享 2019-10-01 00:00:00
處理GET參數(shù):Apache的RewriteRule有廣泛應(yīng)用。
如:把kcwj/a.flv轉(zhuǎn)換到kcwj.php?wj=a處理。

一般的RewriteRule會(huì)這樣寫:

RewriteRule ^kcwj/({1,}) kcwj.php?wj=$1

但是這樣寫有一個(gè)問題,就是當(dāng)kcwj/a.flv?abc=aaa時(shí),也就是帶GET參數(shù)時(shí),參數(shù)會(huì)丟失。解決的方法是在RewriteRule規(guī)則的末尾加上 ,如下:

RewriteRule ^kcwj/({1,}) kcwj.php?wj=$1 構(gòu)造虛擬空間:

RewriteRule ^(\w+?)/(.+\.php)$ /$2?pbottlescope=$1
一條RewriteRule指令,定義一條重寫規(guī)則,規(guī)則間的順序非常重要。對Apache1.2及以后的版本,模板(pattern)是一個(gè)POSIX正則式,用以匹配當(dāng)前的URL。當(dāng)前的URL不一定是用記最初提交的URL,因?yàn)榭赡苡靡恍┮?guī)則在此規(guī)則前已經(jīng)對URL進(jìn)行了處理。

  對mod_rewrite來說,!是個(gè)合法的模板前綴,表示“非”的意思,這對描述“不滿足某種匹配條件”的情況非常方便,或用作最后一條默認(rèn)規(guī)則。當(dāng)使用!時(shí),不能在模板中有分組的通配符,也不能做后向引用。

  當(dāng)匹配成功后,Substitution會(huì)被用來替換相應(yīng)的匹配,它除了可以是普通的字符串以外,還可以包括:
1. $N,引用RewriteRule模板中匹配的 相關(guān)字串,N表示序號(hào),N=0..9
2. %N,引用最后一個(gè)RewriteCond模板中匹配的數(shù)據(jù),N表示序號(hào)
3. %{VARNAME},服務(wù)器變量
4. ${mapname:key|default},映射函數(shù)調(diào)用

這些特殊內(nèi)容的擴(kuò)展,按上述順序進(jìn)行。
  一個(gè)URL的全部相關(guān)部分都會(huì)被Substitution替換,而且這個(gè)替換過程會(huì)一直持續(xù)到所有的規(guī)則都被執(zhí)行完,除非明確地用L標(biāo)志中斷處理過程。
  當(dāng)susbstitution有”-”前綴時(shí),表示不進(jìn)行替換,只做匹配檢查。
  利用RewriteRule,可定義含有請求串(Query String)的URL,此時(shí)只需在Sustitution中加入一個(gè)?,表示此后的內(nèi)容放入QUERY_STRING變量中。如果要清空一個(gè) QUERY_STRING變量,只需要以?結(jié)束Substitution串即可。
  如果給一個(gè)Substitution增加一個(gè)


1. 'redirect|R ' (強(qiáng)制重定向)
  給當(dāng)前的URI增加前綴



2. 'forbidden|F' (強(qiáng)制禁止訪問URL所指的資源)
  立即返回狀態(tài)值403 (FORBIDDEN)的應(yīng)答包。將這個(gè)標(biāo)志與合適的RewriteConds 聯(lián)合使用,可以阻斷訪問某些URL。

3. 'gone|G' (強(qiáng)制返回URL所指資源為不存在(gone))
  立即返回狀態(tài)值410 (GONE)的應(yīng)答包。用這個(gè)標(biāo)志來標(biāo)記URL所指的資源永久消失了.

4. # 'proxy|P' (強(qiáng)制將當(dāng)前URL送往代理模塊(proxy module))
  這個(gè)標(biāo)志,強(qiáng)制將substitution當(dāng)作一個(gè)發(fā)向代理模塊的請求,并立即將共送往代理模塊。因此,必須確保substitution串是一個(gè)合法的URI (如, 典型的情況是以

5. 'last|L' (最后一條規(guī)則)
  中止重寫流程,不再對當(dāng)前URL施加更多的重寫規(guī)則。這相當(dāng)于perl的last命令或C的break命令。

6. 'next|N' (下一輪)
  重新從第一條重寫規(guī)則開始執(zhí)行重寫過程,新開的過程中的URL不應(yīng)當(dāng)與最初的URL相同。 這相當(dāng)于Perl的next命令或C的continue命令. 千萬小心不要產(chǎn)生死循環(huán)。

7. # 'chain|C' (將當(dāng)前的規(guī)則與其后續(xù)規(guī)則綑綁(chained))
  當(dāng)規(guī)則匹配時(shí),處理過程與沒有綑綁一樣;如果規(guī)則不匹配,則綑綁在一起的后續(xù)規(guī)則也不在檢查和執(zhí)行。

8. 'type|T=MIME-type' (強(qiáng)制MIME類型)
  強(qiáng)制將目標(biāo)文件的MIME-type為某MIME類型。例如,這可用來模仿mod_alias模塊對某目錄的ScriptAlias指定,通過強(qiáng)制將該目錄下的所有文件的類型改為 “application/x-httpd-cgi”.

9. 'nosubreq|NS' (used only if no internal sub-request )
  這個(gè)標(biāo)志強(qiáng)制重寫引擎跳過為內(nèi)部sub-request的重寫規(guī)則.例如,當(dāng)mod_include試圖找到某一目錄下的默認(rèn)文件時(shí) (index.xxx),sub-requests 會(huì)在Apache內(nèi)部發(fā)生. Sub-requests并非總是有用的,在某些情況下如果整個(gè)規(guī)則集施加到它上面,會(huì)產(chǎn)生錯(cuò)誤。利用這個(gè)標(biāo)志可排除執(zhí)行一些規(guī)則。

10. 'nocase|NC' (模板不區(qū)分大小寫)
這個(gè)標(biāo)志會(huì)使得模板匹配當(dāng)前URL時(shí)忽略大小寫的差別。



11. 'qsappend|QSA' (追加請求串(query string))
  這個(gè)標(biāo)志,強(qiáng)制重寫引擎為Substitution的請求串追加一部分串,則不是替換掉原來的。借助這個(gè)標(biāo)志,可以使用一個(gè)重寫規(guī)則給請求串增加更多的數(shù)據(jù)。

12. 'noescape|NE' (不對輸出結(jié)果中的特殊字符進(jìn)行轉(zhuǎn)義處理)
  通常情況下,mod_write的輸出結(jié)果中,特殊字符(如'%', '$', ';', 等)會(huì)轉(zhuǎn)義為它們的16進(jìn)制形式(如分別為'%25', '%24', and '%3B')。這個(gè)標(biāo)志會(huì)禁止mod_rewrite對輸出結(jié)果進(jìn)行此類操作。 這個(gè)標(biāo)志只能在 Apache 1.3.20及以后的版本中使用。

13. 'passthrough|PT' (通過下一個(gè)處理器)
  這個(gè)標(biāo)志強(qiáng)制重寫引擎用filename字段的值來替換內(nèi)部request_rec數(shù)據(jù)結(jié)構(gòu)中uri字段的值。. 使用這個(gè)標(biāo)志,可以使后續(xù)的其它URI-to-filename轉(zhuǎn)換器的Alias、ScriptAlias、Redirect等指令,也能正常處理 RewriteRule指令的輸出結(jié)果。用一個(gè)小例子來說明它的語義:如果要用mod_rewrite的重寫引擎將/abc轉(zhuǎn)換為/def,然后用 mod_alas將/def重寫為ghi,則要:
RewriteRule ^/abc(.*) /def$1
Alias /def /ghi
如果PT標(biāo)志被忽略,則mod_rewrite也能很好完成工作,如果., 將 uri=/abc/... 轉(zhuǎn)換為filename=/def/... ,完全符合一個(gè)URI-to-filename轉(zhuǎn)換器的動(dòng)作。接下來 mod_alias 試圖做 URI-to-filename 轉(zhuǎn)換時(shí)就會(huì)出問題。
注意:如果要混合都含有URL-to-filename轉(zhuǎn)換器的不同的模塊的指令,必須用這個(gè)標(biāo)志。最典型的例子是mod_alias和mod_rewrite的使用。

14. 'skip|S=num' (跳過后面的num個(gè)規(guī)則)
  當(dāng)前規(guī)則匹配時(shí),強(qiáng)制重寫引擎跳過后續(xù)的num個(gè)規(guī)則。用這個(gè)可以來模仿if-then-else結(jié)構(gòu):then子句的最后一條rule的標(biāo)志是skip=N,而N是else子句的規(guī)則條數(shù)。

15. 'env|E=VAR:VAL' (設(shè)置環(huán)境變量)
  設(shè)置名為VAR的環(huán)境變量的值為VAL,其中VAL中可以含有正則式的后向引用($N或%N)。這個(gè)標(biāo)志可以使用多次,以設(shè)置多個(gè)環(huán)境變量。這兒設(shè)置的變量,可以在多種情況下被引用,如在XSSI或CGI中。另外,也可以在RewriteCond模板中以%{ENV:VAR}的形式被引用。

16.
注意:一定不要忘記,在服務(wù)器范圍內(nèi)的配置文件中,模板(pattern)用以匹配整個(gè)URL;而在目錄范圍內(nèi)的配置文件中,目錄前綴總是被自動(dòng)去掉后再進(jìn)行模板匹配的,且在替換完成后自動(dòng)再加上這個(gè)前綴。這個(gè)功能對很多種類的重寫是非常重要的,因?yàn)槿绻麤]有去前綴,則要進(jìn)行父目錄的匹配,而父目錄的信息并不是總能得到的。一個(gè)例外是,當(dāng)substitution中有http://打頭時(shí),則不再自動(dòng)增加前綴了,如果P標(biāo)志出現(xiàn),則會(huì)強(qiáng)制轉(zhuǎn)向代理。

注意:如果要在某個(gè)目錄范圍內(nèi)啟動(dòng)重寫引擎,則需要在相應(yīng)的目錄配置文件中設(shè)置“RewriteEngine on”,且目錄的“Options FollowSymLinks”必須設(shè)置。如果管理員由于安全原因沒有打開FollowSymLinks,則不能使用重寫引擎。
http://hostname 開頭),否則會(huì)從代理模塊得到一個(gè)錯(cuò)誤. 這個(gè)標(biāo)志,是ProxyPass指令的一個(gè)更強(qiáng)勁的實(shí)現(xiàn),將遠(yuǎn)程請求(remote stuff)映射到本地服務(wù)器的名字空間(namespace)中來。
  注意,使用這個(gè)功能必須確保代理模塊已經(jīng)編譯到Apache 服務(wù)器程序中了. 可以用“httpd -l ”命令,來檢查輸出中是否含有mod_proxy.c來確認(rèn)一下。如果沒有,而又需要使用這個(gè)功能,則需要重新編譯``httpd''程序并使用 mod_proxy有效。 http://thishost/ ,從而生成一個(gè)新的URL,強(qiáng)制生成一個(gè)外部重定向(external redirection,指生的URL發(fā)送到客戶端,由客戶端再次以新的URL發(fā)出請求,雖然新URL仍指向當(dāng)前的服務(wù)器). 如果沒有指定的code值,則HTTP應(yīng)答以狀態(tài)值302 (MOVED TEMPORARILY),如果想使用300-400(不含400)間的其它值可以通過在code的位置以相應(yīng)的數(shù)字指定,也可以用標(biāo)志名指定: temp (默認(rèn)值), permanent, seeother.
注意,當(dāng)使用這個(gè)標(biāo)志時(shí),要確實(shí)substitution是個(gè)合法的URL,這個(gè)標(biāo)志只是在URL前增加http://thishost/ 前綴而已,重寫操作會(huì)繼續(xù)進(jìn)行。如果要立即將新URL重定向,用L標(biāo)志來中重寫流程。 http://thishost ]的前綴,則mod_rewrite會(huì)自動(dòng)將此前綴去掉。因此,利用 http://thisthost 做一個(gè)無條件的重定向到自己,將難以奏效。要實(shí)現(xiàn)這種效果,必須使用R標(biāo)志。
  Flags是可選參數(shù),當(dāng)有多個(gè)標(biāo)志同時(shí)出現(xiàn)時(shí),彼此間以逗號(hào)分隔。
咨詢小瓶科技
咨詢我們
頂部