亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

RewriteCond 和RewriteRule

系統(tǒng) 2047 0

Apache的Mod_rewrite學習 (RewriteCond重寫規(guī)則的條件)收藏
RewriteCond Syntax: RewriteCond TestString CondPattern [flags]   RewriteCond指令定義一條規(guī)則條件。在一條RewriteRule指令前面可能會有一條或多條RewriteCond指令,只有當自身的模 板(pattern)匹配成功且這些條件也滿足時規(guī)則才被應用于當前URL處理。   TestString是一個字符串,除了包含普通的字符外,還可以包括下列的可擴展結(jié)構(gòu):
1.?????? $N,RewriteRule后向引用,其中(0 <= N <= 9)   $N引用緊跟在RewriteCond后面的RewriteRule中模板中的括號中的模板在當前URL中匹配的數(shù)據(jù)。
2.?????? %N,RewriteCond后向引用,其中(0 <= N <= 9)   %N引用最后一個RewriteCond的模板中的括號中的模板在當前URL中匹配的數(shù)據(jù)。
3.?????? ${mapname:key|default},RewriteMap擴展. 具體參見RewriteMap
4.?????? %{ NAME_OF_VARIABLE } ,服務器變量。 變量的名字如下表(分類顯示)

RewriteCond 和RewriteRule ??

5.???????

RewriteCond 和RewriteRule

6.?????? 特別說明:
o??????? SCRIPT_FILENAME和REQUEST_FILENAME變量含有相同的值,也就是Apache服務器內(nèi)部數(shù)據(jù)結(jié)構(gòu)request_rec的 filename字段的值。第一個變量是一個CGI變量,而第二個則與REQUEST_URI(含有request_rec數(shù)據(jù)結(jié)構(gòu)中uri字段的值)保 持一致。
o??????? %{ENV:variable}中的variable可以是任何環(huán)境變量的名字。對其值的查找,先通過Apache內(nèi)部的數(shù)據(jù)結(jié)構(gòu),(如找不到)再在Apache服務器進程中通過getenv()查找。
o??????? %{HTTP:header}中的header可以是任何HTTP MIME-header的名字,其值通過查找HTTP請求信息而得。
o??????? %{LA-U:variable} 用來引用后續(xù)API階段中定義的、當前還不知道的值,具體實現(xiàn)是通過執(zhí)行一個基于URL的內(nèi)部的sub-request來決定的variable的最終的 值。例如,假如你想在服務器范圍內(nèi)利用REMOTE_USER的值來完成重寫,但這個值是在驗證階段設置的,而驗證階段是在URL轉(zhuǎn)換階段的后面。從另一 方面講,由于mod_rewrite在修補(fixup)API階段進行目錄范圍的重寫,而修補階段在驗證階段的后面,所以此時只要用% {REMOTE_USER}就可以取得該值了。
o??????? %{LA-F:variable},執(zhí)行一個基于文件名字(filename)的內(nèi)部sub-request來決定variable的最終的值。大多數(shù)時間內(nèi),這和LA-U相同。
?
  CondPattern是一個條件模板,也就是說,是一個擴展正則式(extended regular expression),用與跟TestString進行匹配。作為一個標準的擴展正則式,CondPattern有以下補充:
1.?????? 可以在模板串前增加一個!前綴,以用表示不匹配模板。但并不是所有的test都可以加!前綴。
2.?????? CondPattern中可以使用以下特殊變量:
o??????? '<CONDPATTERN' (小于,基于字母順序) 將condPattern當作一個普通字符串,將它和TestString進行比較,當TestString 的字符小于CondPattern為真.
o??????? '>CondPattern' (大于) 將condPattern當作一個普通字符串,將它和TestString進行比較,當TestString 的字符大于CondPattern為真.
o??????? '=CondPattern' (等于) 將condPattern當作一個普通字符串,將它和TestString進行比較,當TestString 與CondPattern完全相同時為真.如果CondPattern只是 "" (兩個引號緊挨在一起) 此時需TestString 為空字符串方為真.
o??????? '-d' (是否為目錄) 將testString當作一個目錄名,檢查它是否存在以及是否是一個目錄.
o??????? '-f' (是否是regular file) 將testString當作一個文件名,檢查它是否存在以及是否是一個regular文件.
o??????? '-s' (是否為長度不為0的regular文件) 將testString當作一個文件名,檢查它是否存在以及是否是一個長度大于0的regular文件
o??????? '-l' (是否為symbolic link) 將testString當作一個文件名,檢查它是否存在以及是否是一個 symbolic link.
o??????? '-F' (通過subrequest來檢查某文件是否可訪問) 檢查TestString是否是一個合法的文件,而且通過服務器范圍內(nèi)的當前設置的訪問控制進行訪問。這個檢查是通過一個內(nèi)部subrequest完成 的, 因此需要小心使用這個功能以降低服務器的性能。
o??????? '-U' (通過subrequest來檢查某個URL是否存在) 檢查TestString是否是一個合法的URL,而且通過服務器范圍內(nèi)的當前設置的訪問控制進行訪問。這個檢查是通過一個內(nèi)部subrequest完成 的, 因此需要小心使用這個功能以降低服務器的性能。
  [flags]是第三個參數(shù),多個標志之間用逗號分隔。
1.?????? 'nocase|NC' (不區(qū)分大小寫)   在擴展后的TestString和CondPattern中,比較時不區(qū)分文本的大小寫。注意,這個標志對文件系統(tǒng)和subrequest檢查沒有影響.
2.?????? 'ornext|OR' (建立與下一個條件的或的關(guān)系)   默認的情況下,二個條件之間是AND的關(guān)系,用這個標志將關(guān)系改為OR。例如: RewriteCond %{REMOTE_HOST} ^host1.* [OR] RewriteCond %{REMOTE_HOST} ^host2.* [OR] RewriteCond %{REMOTE_HOST} ^host3.* RewriteRule ... 如果沒有[OR]標志,需要寫三個條件/規(guī)則.
例子:根據(jù)客戶端瀏覽器的不同,返回不同的首頁面。 RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* RewriteRule ^/$ /homepage.max.html [L] RewriteCond %{HTTP_USER_AGENT} ^Lynx.* RewriteRule ^/$ /homepage.min.html [L] RewriteRule ^/$ /homepage.std.html [L]
當你在地址欄里輸入 sina.com.cn? google.cn

看看有什么變化?是不是會自動跳轉(zhuǎn)到 www.sina.com.cn ?? www.google.cn

這一技術(shù)通過apache的rewrite可以實現(xiàn),當然你得把 不帶www的域名指向你服務器的IP

?要是虛擬主機的話,得在viralhost段加入 ServerAlias xxx.com

然后打開重寫引擎功能

?RewriteEngine On

能過rewritecond判斷主機名是否帶www

RewriteCond %{HTTP_HOST}? ^xxx\.com$ [NC]

然后來一條

RewriteRule ^/(.*)$? http://www.xxx.com/$1 [R=301,L]

OK,重起apache,現(xiàn)在在瀏覽器中輸入 xxx.com 看看是不是自動變成了 www.xxx.com 了呢。

重新整理一下就是:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^xxx\.com$ [NC]

RewriteRule ^/(.*)$? http://www.xxx.com/$1 [R=301,L]

?

源地址: http://blog.csdn.net/keyunq/archive/2008/06/11/2536875.aspx

?

一?. RewriteRule

Syntax: RewriteRule Pattern Substitution [flags]


  一條RewriteRule指令,定義一條重寫規(guī)則,規(guī)則間的順序 非常重要。對Apache1.2及以后的版本,模板(pattern)是一個POSIX正則式,用以匹配當前的URL。當前的URL不一定是用記最初提交 的URL,因為可能用一些規(guī)則在此規(guī)則前已經(jīng)對URL進行了處理。


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


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


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

?


1.?'redirect|R [=code]' (強制重定向)
  給當前的URI增加前綴


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 (如, 典型的情況是以


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)。


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


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

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


10.?'nocase|NC' (模板不區(qū)分大小寫)

這個標志會使得模板匹配當前URL時忽略大小寫的差別。

?


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


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


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


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


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


16.?

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

注 意:如果要在某個目錄范圍內(nèi)啟動重寫引擎,則需要在相應的目錄配置文件中設置“RewriteEngine on”,且目錄的“Options FollowSymLinks”必須設置。如果管理員由于安全原因沒有打開FollowSymLinks,則不能使用重寫引擎。

http://hostname 開頭),否則會從代理模塊得到一個錯誤. 這個標志,是ProxyPass指令的一個更強勁的實現(xiàn),將遠程請求(remote stuff)映射到本地服務器的名字空間(namespace)中來。
   注意,使用這個功能必須確保代理模塊已經(jīng)編譯到Apache 服務器程序中了. 可以用“httpd -l ”命令,來檢查輸出中是否含有mod_proxy.c來確認一下。如果沒有,而又需要使用這個功能,則需要重新編譯``httpd''程序并使用 mod_proxy有效。
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標志來中重寫流程。 http://thishost[:port ]的前綴,則mod_rewrite會自動將此前綴去掉。因此,利用 http://thisthost 做一個無條件的重定向到自己,將難以奏效。要實現(xiàn)這種效果,必須使用R標志。
  Flags是可選參數(shù),當有多個標志同時出現(xiàn)時,彼此間以逗號分隔。

?

RewriteCond 和RewriteRule


更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 爱爱夜夜爽成人夜夜爽 | 欧美又黄又嫩大片a级 | 777福利| 久久免费成人 | 亚洲爱爱天堂 | 免费福利入口在线观看 | 亚洲观看视频 | 成人深夜视频 | 奇米影视久久 | 久久国产精品成人免费 | 牛牛影院免费永久地址 | 国产91在线免费 | 欧美日韩一区二区三在线 | 福利入口在线观看 | 国产美女免费观看 | 久久精品亚洲精品国产色婷 | 国产日产欧美精品 | 亚洲欧美日韩一区 | 婷婷视频在线 | 欧洲免费在线视频 | 国产精品9999久久久久仙踪林 | 欧美成人香蕉在线观看 | 老子不卡影院 | 日日夜夜爽 | 国产麻豆免费 | xxxxxx国产精品视频 | 92国产福利久久青青草原 | 欧美精品亚洲二区 | 男女车车好快的车车免费网站 | 国产农村妇女毛片精品久久久 | 波多野结中文字幕在线69视频 | 成人网18免费网 | 久久er这里只有精品 | 色综合色综合色综合网址 | 男人的天堂视频 | 国产毛片一级国语版 | 四虎久久| 成人精品亚洲 | 精品99在线观看 | 精品一区久久 | 成人a一级毛片免费看 |