久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

htaccess語法之RewriteCond與RewriteRule指令格式詳細(xì)解釋

 昵稱597197 2015-03-15

htaccess語法之RewriteCond與RewriteRule指令格式詳細(xì)解釋

 (2012-11-09 18:09:08)
標(biāo)簽: 

htaccess

 

it

分類: 網(wǎng)絡(luò)

上文htaccess語法詳細(xì)解釋與用例分析中對RewriteCond和RewriteRule的用法進行了舉例分析,本文將詳細(xì)描述上述兩個命令的使用格式,,與所使用的變量和規(guī)則,。這篇文章很長啊哈,請認(rèn)真閱讀,,內(nèi)容都很有用哦,。

RewriteCond指令格式

【說明】定義重寫發(fā)生的條件
【語法】RewriteCond TestString CondPattern [flags]

RewriteCond指令定義一條規(guī)則條件。在一條RewriteRule指令前面可能會有一條或多條RewriteCond指令,,只有當(dāng)RewriteCond的條件(CondPattern)匹配成功時,,RewriteRule的重寫規(guī)則才被應(yīng)用于當(dāng)前URL處理。

TestString是一個純文本的字符串,,除了包含普通的字符外,,還可以包括下列的變量結(jié)構(gòu)擴展:

RewriteMap擴展:引用方法是:${mapname:key|default} 細(xì)節(jié)請參見RewriteMap指令 。

TestString可以包含服務(wù)器變量 ,,引用方法是:%{NAME_OF_VARIABLE}

NAME_OF_VARIABLE可以是下表列出的字符串之一:

HTTP頭連接與請求服務(wù)器自身日期和時間其它
HTTP_USER_AGENTDOCUMENT_ROOTTIME_YEARAPI_VERSION
HTTP_REFERERSERVER_ADMINTIME_MONTHE_REQUEST
HTTP_COOKIESERVER_NAMETIME_DAYREQUEST_URI
HTTP_FORWARDEDSERVER_ADDRTIME_HOURREQUEST_FILENAME
HTTP_HOSTSERVER_PORTTIME_MINIS_SUBREQ
HTTP_PROXY_CONNECTIONSERVER_PROTOCOLTIME_SECHTTPS
HTTP_ACCEPTSERVER_SOFTWARETIME_WDAY
REMOTE_ADDR
TIME
REMOTE_HOST


REMOTE_PORT


REMOTE_USER


REMOTE_IDENT


REQUEST_METHOD


SCRIPT_FILENAME


PATH_INFO


QUERY_STRING


AUTH_TYPE


這些變量都對應(yīng)于類似命名的HTTP MIME頭,、Apache服務(wù)器的C變量、Unix系統(tǒng)中的struct tm字段,,其中的大多數(shù)在其他的手冊或者CGI規(guī)范中都有說明,。 其中有mod_rewrite所特有的變量如下:

IS_SUBREQ

如果正在處理的請求是一個子請求,它將包含字符串”true”,,否則就是”false”,。 模塊為了解析URI中的附加文件,可能會產(chǎn)生子請求,。

API_VERSION

這是正在使用中的Apache模塊API(服務(wù) 器和模塊之間內(nèi)部接口)的版本,, 其定義位于include/ap_mmn.h中。 此模塊API版本對應(yīng)于正在使用的Apache的版本(比如在Apache 1.3.14的發(fā)行版中這個值是19990320:10),。 通常,,對它感興趣的是模塊的開發(fā)者。

THE_REQUEST

這是由瀏覽器發(fā)送的完整的HTTP請求行(比如:”GET /index.html HTTP/1.1″),。 它不包含任何瀏覽器發(fā)送的其它頭信息,。

REQUEST_URI

這是在HTTP請求行中所請求的資源(比如上述例子中的”/index.html”)。

REQUEST_FILENAME

這是與請求相匹配的完整的本地文件系統(tǒng)的文件路徑名。

HTTPS

如果連接使用了SSL/TLS,,它將包含字符串”on”,,否則就是”off”(無論mod_ssl 是否已經(jīng)加載,該變量都可以安全的使用),。

其它注意事項:

SCRIPT_FILENAME和 REQUEST_FILENAME包含的值是相同的——即Apache服務(wù)器內(nèi)部的request_rec結(jié)構(gòu)中的 filename字段,。 第一個就是大家都知道的CGI變量名,而第二個則是REQUEST_URI(request_rec結(jié)構(gòu)中的uri字段)的一個副本,。

  1. 特殊形式:%{ENV:variable} ,,其中的variable可以是任意環(huán)境變量。 它是通過查找Apache內(nèi)部結(jié)構(gòu)或者(如果沒找到的話)由Apache服務(wù)器進程通過getenv()得到的,。
  2. 特殊形式:%{SSL:variable} ,,其中的variable可以是一個SSL環(huán)境變量 的名字,無論mod_ssl 模塊是否已經(jīng)加載都可以使用(未加載時為空字符串),。 比如:%{SSL:SSL_CIPHER_USEKEYSIZE}將會被替換為128,。
  3. 特殊形式:%{HTTP:header} ,其中的header可以是任意HTTP MIME頭的名稱,。 它總是可以通過查找HTTP請求而得到,。 比如:%{HTTP:Proxy-Connection}將被替換為Proxy-Connection:HTTP頭的值。
  4. 預(yù)設(shè)形式:%{LA-U:variable} ,,variable的最終值在執(zhí)行一個內(nèi)部(基于URL的)子請求后確定,。 當(dāng)需要使用一個目前未知但是會在之后的過程中設(shè)置的變量的時候,就可以使用這個方法,。 例如,,需要在服務(wù)器級配置(httpd.conf文件)中根據(jù)REMOTE_USER變量進行重寫, 就必須使用%{LA-U:REMOTE_USER},。 因為此變量是由URL重寫(mod??_rewrite)步驟之后的認(rèn)證步驟設(shè)置的,。 但是另一方面,因為mod_rewrite是通過API修正步驟來實現(xiàn)目錄級(.htaccess文件)配置的,, 而認(rèn)證步驟先于API修正步驟,,所以可以用%{REMOTE_USER}。
  5. 預(yù)設(shè)形式:%{LA-F:variable} ,,variable的最終值在執(zhí)行一個內(nèi)部(基于文件名的)子請求后確定。 大多數(shù)情況下和上述的LA-U是相同的,。

●CondPattern是條件模式,,即一個應(yīng)用于當(dāng)前TestString實例的正則表達式。TestString將被首先計算,,然后再與CondPattern匹配,。

注意:CondPattern是一個perl兼容的正則表達式,但是還有若干增補:

1、可以在CondPattern串的開頭使用”!’(驚嘆號)來指定 不匹配 ,。
2,、CondPatterns有若干特殊的變種。 除了正則表達式的標(biāo)準(zhǔn)用法,,還有下列用法:

將CondPattern視為純字符串,,與TestString按詞典順序進行比較。 如果TestString小于CondPattern則為真,。
“>CondPattern”————-(詞典順序的大于)

將CondPattern視為純字符串,,與TestString按詞典順序進行比較。 如果TestString大于CondPattern則為真,。
“=CondPattern”————-(詞典順序的等于)

將CondPattern視為純字符串,,與TestString按詞典順序進行比較。 如果TestString等于CondPattern(兩個字符串逐個字符地完全相等)則為真,。

如果CondPattern是”"—(兩個雙引號),,則TestString將與空字符串進行比較。
“-d”————-(目錄)

將TestString視為一個路徑名并測試它是否為一個存在的目錄,。
“-f “————-(常規(guī)文件)

將TestString視為一個路徑名并測試它是否為一個存在的常規(guī)文件,。
“-s “————-(非空的常規(guī)文件)

將TestString視為一個路徑名并測試它是否為一個存在的、尺寸大于0的常規(guī)文件,。
“-l “————-(符號連接)

將TestString視為一個路徑名并測試它是否為一個存在的符號連接,。
“-x “————-(可執(zhí)行)

將TestString視為一個路徑名并測試它是否為一個存在的、具有可執(zhí)行權(quán)限的文件,。 該權(quán)限由操作系統(tǒng)檢測,。
“-F “————-(對子請求存在的文件)

檢查TestString是否為一個有效的文件,而且可以在服務(wù)器當(dāng)前的訪問控制配置下被訪問,。 它使用一個內(nèi)部子請求來做檢查,,由于會降低服務(wù)器的性能,所以請謹(jǐn)慎使用,!
“-U “————-(對子請求存在的URL)

檢查TestString是否為一個有效的URL,,而且可以在服務(wù)器當(dāng)前的訪問控制配置下被訪問。 它使用一個內(nèi)部子請求來做檢查,,由于會降低服務(wù)器的性能,,所以請謹(jǐn)慎使用!
注意: 所有這些測試都可以用驚嘆號作前綴(“!”)以實現(xiàn)測試條件的反轉(zhuǎn),。

●在CondPattern之后追加特殊的標(biāo)記[flags] 作為RewriteCond指令的第三個參數(shù),。flags是一個以逗號分隔的以下標(biāo)記的列表:

“nocase|NC”—————(忽略大小寫)

它使測試忽略大小寫,擴展后的TestString和CondPattern中’AZ’ 和’a-z’是沒有區(qū)別的,。 此標(biāo)記僅用于TestString和CondPattern的比較,,而對文件系統(tǒng)和子請求的檢查不起作用。
“ornext|OR”—————(或下一條件)

代碼簡寫全寫解釋
R[=code] redirect強制外部重定向
F forbidden禁用URL,返回403HTTP狀態(tài)碼。
G gone強制URL為已廢棄的
P proxy強制使用代理轉(zhuǎn)發(fā),。
L last表明當(dāng)前規(guī)則是最后一條規(guī)則,,停止分析以后規(guī)則的重寫。
N next重新從第一條規(guī)則開始運行重寫過程,。
C chain與下一條規(guī)則關(guān)聯(lián)
如果規(guī)則匹配則正常處理,,該標(biāo)志無效,如果不匹配,,那么下面所有關(guān)聯(lián)的規(guī)則都跳過,。
T=MIME-type type強制MIME類型
NS nosubreq只用于不是內(nèi)部子請
NC nocase不區(qū)分大小寫
QSA qsappend追加請求字符串
NE noescape不在輸出轉(zhuǎn)義特殊字符
PT passthrough傳遞給下一個處理
S=num skip跳過num條規(guī)則
E=VAR:VAL env設(shè)置環(huán)境變量
CO=NAME:VAL:domain[:lifetime[:path]] cookie設(shè)置cookie

redirect|R [=code] (強制重定向 redirect)

以 http://thishost[:thisport]/(使新的URL成為一個URI) 為前綴的Substitution可以強制性執(zhí)行一個外部重定向。 如果code沒有指定,,則產(chǎn)生一個HTTP響應(yīng)代碼302(臨時性移動),。 如果需要使用在300-400范圍內(nèi)的其他響應(yīng)代碼,只需在此指定這個數(shù)值即可,, 另外,,還可以使用下列符號名稱之一: temp (默認(rèn)的), permanent, seeother. 用它可以把規(guī)范化的URL反饋給客戶端,如, 重寫“/~”為 “/u/”,,或?qū)?u/user加上斜杠,,等等。

注意: 在使用這個標(biāo)記時,,必須確保該替換字段是一個有效的URL! 否則,,它會指向一個無效的位置! 并且要記住,此標(biāo)記本身只是對URL加上 http://thishost[:thisport]/的前綴,,重寫操作仍然會繼續(xù),。 通常,你會希望停止重寫操作而立即重定向,,則還需要使用’L’標(biāo)記.

forbidden|F (強制URL為被禁止的 forbidden)

強制當(dāng)前URL為被禁止的,,即,立即反饋一個HTTP響應(yīng)代碼403(被禁止的),。 使用這個標(biāo)記,,可以鏈接若干RewriteConds以有條件地阻塞某些URL。

gone|G’(強制URL為已廢棄的 gone)

強制當(dāng)前URL為已廢棄的,,即,,立即反饋一個HTTP響應(yīng)代碼410(已廢棄的)。 使用這個標(biāo)記,,可以標(biāo)明頁面已經(jīng)被廢棄而不存在了.

proxy|P (強制為代理 proxy)

此標(biāo)記使替換成分被內(nèi)部地強制為代理請求,,并立 即(即, 重寫規(guī)則處理立即中斷)把處理移交給代理模塊,。 你必須確保此替換串是一個有效的(比如常見的以 http://hostname開頭的)能夠為Apache代理模塊所處理的URI。 使用這個標(biāo)記,可以把某些遠程成分映射到本地服務(wù)器名稱空間,, 從而增強了ProxyPass指令的功能,。

注意: 要使用這個功能,代理模塊必須編譯在Apache服務(wù)器中,。 如果你不能確定,,可以檢查“httpd -l”的輸出中是否有mod_proxy.c。 如果有,,則mod_rewrite可以使用這個功能,; 如果沒有,則必須啟用mod_proxy并重新編譯“httpd”程序,。

last|L (最后一個規(guī)則 last)

立即停止重寫操作,,并不再應(yīng)用其他重寫規(guī)則。 它對應(yīng)于Perl中的last命令或C語言中的break命令,。 這個標(biāo)記可以阻止當(dāng)前已被重寫的URL為其后繼的規(guī)則所重寫,。 舉例,使用它可以重寫根路徑的URL(’/’)為實際存在的URL, 比如, ‘/e/www/’.

next|N (重新執(zhí)行 next round)

重新執(zhí)行重寫操作(從第一個規(guī)則重新開始). 這時再次進行處理的URL已經(jīng)不是原始的URL了,,而是經(jīng)最后一個重寫規(guī)則處理的URL,。 它對應(yīng)于Perl中的next命令或C語言中的continue命令。 此標(biāo)記可以重新開始重寫操作,,即, 立即回到循環(huán)的頭部,。
但是要小心,不要制造死循環(huán)!

chain|C (與下一個規(guī)則相鏈接 chained)

此標(biāo)記使當(dāng)前規(guī)則與下一個(其本身又可以與其后 繼規(guī)則相鏈接的,, 并可以如此反復(fù)的)規(guī)則相鏈接,。 它產(chǎn)生這樣一個效果: 如果一個規(guī)則被匹配,通常會繼續(xù)處理其后繼規(guī)則,, 即,,這個標(biāo)記不起作用;如果規(guī)則不能被匹配,, 則其后繼的鏈接的規(guī)則會被忽略,。比如,在執(zhí)行一個外部重定向時,, 對一個目錄級規(guī)則集,,你可能需要刪除“.www” (此處不應(yīng)該出現(xiàn)“.www”的)。

type|T=MIME-type(強制MIME類型 type)

強制目標(biāo)文件的MIME類型為MIME-type,。 比如,,它可以用于模擬mod_alias中的ScriptAlias指令, 以內(nèi)部地強制被映射目錄中的所有文件的MIME類型為“application/x-httpd-cgi”,。

nosubreq|NS (僅用于不對內(nèi)部子請求進行處理 no internal sub-request)

在當(dāng)前請求是一個內(nèi)部子請求時,,此標(biāo)記強制重寫 引擎跳過該重寫規(guī)則,。 比如,在mod_include試圖搜索可能的目錄默認(rèn)文件(index.xxx)時,, Apache會內(nèi)部地產(chǎn)生子請求,。對子請求,它不一定有用的,,而且如果整個規(guī)則集都起作用,, 它甚至可能會引發(fā)錯誤。所以,,可以用這個標(biāo)記來排除某些規(guī)則,。

根據(jù)你的需要遵循以下原則: 如果你使用了有CGI腳本的URL前綴,以強制它們由CGI腳本處理,, 而對子請求處理的出錯率(或者開銷)很高,,在這種情況下,可以使用這個標(biāo)記,。

nocase|NC (忽略大小寫 no case)

它使Pattern忽略大小寫,,即, 在Pattern與當(dāng)前URL匹配時,’A-Z’ 和’a-z’沒有區(qū)別,。

qsappend|QSA (追加請求串 query string append)

此標(biāo)記強制重寫引擎在已有的替換串中追加一個請求串,,而不是簡單的替換。 如果需要通過重寫規(guī)則在請求串中增加信息,,就可以使用這個標(biāo)記,。

noescape|NE (在輸出中不對URI作轉(zhuǎn)義 no URI escaping)

此標(biāo)記阻止mod_rewrite對重寫結(jié)果應(yīng)用常規(guī)的URI轉(zhuǎn)義規(guī)則。 一般情況下,,特殊字符(如’%’, ‘$’, ‘;’等)會被轉(zhuǎn)義為等值的十六進制編碼,。 此標(biāo)記可以阻止這樣的轉(zhuǎn)義,以允許百分號等符號出現(xiàn)在輸出中,,如:

RewriteRule /foo/(.*) /bar?arg=P1\=$1 [R,NE] 可以使’/foo/zed’轉(zhuǎn)向到一個安全的請求’/bar?arg=P1=zed’.

passthrough|PT (移交給下一個處理器 pass through)

此標(biāo)記強制重寫引擎將內(nèi)部結(jié)構(gòu) request_rec中的uri字段設(shè)置為 filename字段的值,,它只是一個小修改,使之能對來自其他URI到文件名翻譯器的 Alias,,ScriptAlias, Redirect 等指令的輸出進行后續(xù)處理,。舉一個能說明其含義的例子: 如果要通過mod_rewrite的重寫引擎重寫/abc為/def, 然后通過mod_alias使/def轉(zhuǎn)變?yōu)?ghi,,可以這樣:

RewriteRule ^/abc(.*) /def$1 [PT]Alias /def /ghi

如果省略了PT標(biāo)記,,雖然mod_rewrite運作正常, 即, 作為一個使用API的URI到文件名翻譯器,, 它可以重寫uri=/abc/…為filename=/def/…,, 但是,后續(xù)的mod_alias在試圖作URI到文件名的翻譯時,,則會失效,。

注意: 如果需要混合使用不同的包含URI到文件名翻譯器的模塊時,, 就必須使用這個標(biāo)記。,。 混合使用mod_alias和mod_rewrite就是個典型的例子,。

For Apache hackers

如果當(dāng)前Apache API除了URI到文件名hook之外,還有一個文件名到文件名的hook,, 就不需要這個標(biāo)記了! 但是,如果沒有這樣一個hook,,則此標(biāo)記是唯一的解決方案,。 Apache Group討論過這個問題,并在Apache 2.0 版本中會增加這樣一個hook,。

skip|S=num (跳過后繼的規(guī)則 skip)

此標(biāo)記強制重寫引擎跳過當(dāng)前匹配規(guī)則后繼的num個規(guī)則,。 它可以實現(xiàn)一個偽if-then-else的構(gòu)造: 最后一個規(guī)則是then從句,而被跳過的skip=N個規(guī)則是else從句. (它和’chain|C’標(biāo)記是不同的!)

env|E=VAR:VAL (設(shè)置環(huán)境變量 environment variable)

此標(biāo)記使環(huán)境變量VAR的值為VAL, VAL可以包含可擴展的反向引用的正則表達式$N和%N,。 此標(biāo)記可以多次使用以設(shè)置多個變量,。 這些變量可以在其后許多情況下被間接引用,但通常是在XSSI (via ) or CGI (如 $ENV{’VAR’})中,, 也可以在后繼的RewriteCond指令的pattern中通過%{ENV:VAR}作引用,。 使用它可以從URL中剝離并記住一些信息。

cookie|CO=NAME:VAL:domain[:lifetime[:path]] (設(shè)置cookie)

它在客戶端瀏覽器上設(shè)置一個cookie,。 cookie的名稱是NAME,,其值是VAL。 domain字段是該cookie的域,,比如’.apache.org’, 可選的lifetime是cookie生命期的分鐘數(shù),, 可選的path是cookie的路徑。

●舉例說明RewriteCond命令規(guī)則

RewriteCond %{REMOTE_HOST} ^ [OR]
RewriteCond %{REMOTE_HOST} ^*.
RewriteRule …針對這2個主機的規(guī)則集

RewriteCond % { HTTP_USER_AGENT }  ^Mozilla.*
RewriteRule ^/$ /homepage. max .html  [ L ]
如果你使用的瀏覽器識別標(biāo)志是’Mozilla’,,則你將得到內(nèi)容最大化的主頁homepage. max .html(含有Frames等等),。

RewriteRule指令格式

【說明】定義重寫的規(guī)則
【語法】RewriteRule Pattern rewritePattern [flags]

RewriteRule指令,可以定義一條重寫 規(guī)則,,規(guī)則間的順序非常重要,。對Apache1.2及以后的版本,模板(Pattern)是一個POSIX正則式,,用以匹配當(dāng)前的URL,。當(dāng)前的URL不 一定是最初提交的URL,因為可能用一些規(guī)則在此規(guī)則前已經(jīng)對URL進行了處理,。rewritePattern 大多數(shù)文章寫為Substitution ,,這里為了更清楚的認(rèn)識故寫為rewritePattern 。

●Pattern 可以使用如下特殊匹配規(guī)則,,如php等其他語言類似,。

“.” ——————- 換行符以外的所有字符
“\w” —————- 匹配字母或數(shù)字或下劃線或漢字
“\s” —————– 匹配任意的空白符
“\d” —————– 匹配數(shù)字
“\b” —————– 匹配單詞的開始或結(jié)束
“^” —————— 匹配字符串的開始
“$” —————— 匹配字符串的結(jié)束
“*” —————— 重復(fù)零次或更多次
“+” —————— 重復(fù)一次或更多次
“?” ——————- 重復(fù)零次或一次
“{n}” —————- 重復(fù)n次
“{n,}” ————— 重復(fù)n次或更多次
“{n,m}” ————- 重復(fù)n到m次
“[0-9]” ————– 匹配單個數(shù)字

rewritePattern 是針對Pattern 匹配后的URL進行rewritePattern 規(guī)定的替換,。應(yīng)用替換時,前面Pattern 第一個()中匹配的內(nèi)容后面rewritePattern 就可以用$1引用,,第二個()中匹配的就用$2應(yīng)用……以此類推,。

●在rewritePattern 之后追加特殊的標(biāo)記[flags] 作為RewriteRule 指令的第三個參數(shù)。flags可以使用的標(biāo)記,,和上面RewriteCond使用的一樣,。

●舉例說明RewriteRule語法

RewriteRule index.html index.php

比如:http://www./index.html  -> http://www./index.php

RewriteRule ^test([0-9]*).html$ test.php?id=$1

比如:http://www./test8.html  -> http://www./test.php?id=8

RewriteRule ^cat-([0-9]+)-([0-9]+)\.html$ cat.php?id1=$1&id2=$2

比如:http://www./cat-1-3.html -> http://www./cat.php?id1=1&id2=3

RewriteRule ^cat-([a-zA-Z0-9\-]*)-([0-9]+)-([0-9]+)\.html$ cat.php?id0=$1&id1=$2&id2=$3

比如:http://www./cat-zbc2ac-3-5.html -> http://www./cat.php?id0=zbc2ac&id1=3&id2=5

RewriteRule ^cat1-([0-9]+)-([0-9]+)-([0-9]+)\.html$ cat1.php?id1=$1&id2=$2&id3=$3

比如:http://www./cat1-4-3-8.html -> http://www./cat1.php?id1=4&id2=3&id3=8

RewriteRule ^cat([0-9]*)/$ cat.php?id1=$1

比如:http://www./cat5/ -> http://www./cat.php?id1=5

RewriteRule ^catm([0-9]*)/([0-9]*)/$ catm.php?id1=$1&id2=$2

比如:http://www./catm6/3/ -> http://www./catm.php?id1=6&id2=3


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多