国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
htaccess語法之RewriteCond與RewriteRule指令格式詳細(xì)解釋
(2012-11-09 18:09:08)
標(biāo)簽: htaccess
it
分類: 網(wǎng)絡(luò)
上文htaccess語法詳細(xì)解釋與用例分析中對RewriteCond和RewriteRule的用法進(jìn)行了舉例分析,本文將詳細(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)擴(kuò)展:
RewriteMap擴(kuò)展:引用方法是:${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字段)的一個副本。
特殊形式:%{ENV:variable} ,其中的variable可以是任意環(huán)境變量。 它是通過查找Apache內(nèi)部結(jié)構(gòu)或者(如果沒找到的話)由Apache服務(wù)器進(jìn)程通過getenv()得到的。
特殊形式:%{SSL:variable} ,其中的variable可以是一個SSL環(huán)境變量 的名字,無論mod_ssl 模塊是否已經(jīng)加載都可以使用(未加載時為空字符串)。 比如:%{SSL:SSL_CIPHER_USEKEYSIZE}將會被替換為128。
特殊形式:%{HTTP:header} ,其中的header可以是任意HTTP MIME頭的名稱。 它總是可以通過查找HTTP請求而得到。 比如:%{HTTP:Proxy-Connection}將被替換為Proxy-Connection:HTTP頭的值。
預(yù)設(shè)形式:%{LA-U:variable} ,variable的最終值在執(zhí)行一個內(nèi)部(基于URL的)子請求后確定。 當(dāng)需要使用一個目前未知但是會在之后的過程中設(shè)置的變量的時候,就可以使用這個方法。 例如,需要在服務(wù)器級配置(httpd.conf文件)中根據(jù)REMOTE_USER變量進(jìn)行重寫, 就必須使用%{LA-U:REMOTE_USER}。 因為此變量是由URL重寫(mod??_rewrite)步驟之后的認(rèn)證步驟設(shè)置的。 但是另一方面,因為mod_rewrite是通過API修正步驟來實現(xiàn)目錄級(.htaccess文件)配置的, 而認(rèn)證步驟先于API修正步驟,所以可以用%{REMOTE_USER}。
預(yù)設(shè)形式:%{LA-F:variable} ,variable的最終值在執(zhí)行一個內(nèi)部(基于文件名的)子請求后確定。 大多數(shù)情況下和上述的LA-U是相同的。
●CondPattern是條件模式,即一個應(yīng)用于當(dāng)前TestString實例的正則表達(dá)式。TestString將被首先計算,然后再與CondPattern匹配。
注意:CondPattern是一個perl兼容的正則表達(dá)式,但是還有若干增補:
1、可以在CondPattern串的開頭使用”!’(驚嘆號)來指定 不匹配 。
2、CondPatterns有若干特殊的變種。 除了正則表達(dá)式的標(biāo)準(zhǔn)用法,還有下列用法:
將CondPattern視為純字符串,與TestString按詞典順序進(jìn)行比較。 如果TestString小于CondPattern則為真。
“>CondPattern”————-(詞典順序的大于)
將CondPattern視為純字符串,與TestString按詞典順序進(jìn)行比較。 如果TestString大于CondPattern則為真。
“=CondPattern”————-(詞典順序的等于)
將CondPattern視為純字符串,與TestString按詞典順序進(jìn)行比較。 如果TestString等于CondPattern(兩個字符串逐個字符地完全相等)則為真。
如果CondPattern是”"—(兩個雙引號),則TestString將與空字符串進(jìn)行比較。
“-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”—————(忽略大小寫)
它使測試忽略大小寫,擴(kuò)展后的TestString和CondPattern中’AZ’ 和’a-z’是沒有區(qū)別的。 此標(biāo)記僅用于TestString和CondPattern的比較,而對文件系統(tǒng)和子請求的檢查不起作用。
“ornext|OR”—————(或下一條件)
代碼簡寫全寫解釋
R[=code] redirect強(qiáng)制外部重定向
forbidden禁用URL,返回403HTTP狀態(tài)碼。
gone強(qiáng)制URL為已廢棄的
proxy強(qiáng)制使用代理轉(zhuǎn)發(fā)。
last表明當(dāng)前規(guī)則是最后一條規(guī)則,停止分析以后規(guī)則的重寫。
next重新從第一條規(guī)則開始運行重寫過程。
chain與下一條規(guī)則關(guān)聯(lián)
如果規(guī)則匹配則正常處理,該標(biāo)志無效,如果不匹配,那么下面所有關(guān)聯(lián)的規(guī)則都跳過。
T=MIME-type type強(qiáng)制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] (強(qiáng)制重定向 redirect)
以 http://thishost[:thisport]/(使新的URL成為一個URI) 為前綴的Substitution可以強(qiáng)制性執(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 (強(qiáng)制URL為被禁止的 forbidden)
強(qiáng)制當(dāng)前URL為被禁止的,即,立即反饋一個HTTP響應(yīng)代碼403(被禁止的)。 使用這個標(biāo)記,可以鏈接若干RewriteConds以有條件地阻塞某些URL。
gone|G’(強(qiáng)制URL為已廢棄的 gone)
強(qiáng)制當(dāng)前URL為已廢棄的,即,立即反饋一個HTTP響應(yīng)代碼410(已廢棄的)。 使用這個標(biāo)記,可以標(biāo)明頁面已經(jīng)被廢棄而不存在了.
proxy|P (強(qiáng)制為代理 proxy)
此標(biāo)記使替換成分被內(nèi)部地強(qiáng)制為代理請求,并立 即(即, 重寫規(guī)則處理立即中斷)把處理移交給代理模塊。 你必須確保此替換串是一個有效的(比如常見的以 http://hostname開頭的)能夠為Apache代理模塊所處理的URI。 使用這個標(biāo)記,可以把某些遠(yuǎn)程成分映射到本地服務(wù)器名稱空間, 從而增強(qiáng)了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ī)則重新開始). 這時再次進(jìn)行處理的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(強(qiáng)制MIME類型 type)
強(qiáng)制目標(biāo)文件的MIME類型為MIME-type。 比如,它可以用于模擬mod_alias中的ScriptAlias指令, 以內(nèi)部地強(qiáng)制被映射目錄中的所有文件的MIME類型為“application/x-httpd-cgi”。
nosubreq|NS (僅用于不對內(nèi)部子請求進(jìn)行處理 no internal sub-request)
在當(dāng)前請求是一個內(nèi)部子請求時,此標(biāo)記強(qiáng)制重寫 引擎跳過該重寫規(guī)則。 比如,在mod_include試圖搜索可能的目錄默認(rèn)文件(index.xxx)時, Apache會內(nèi)部地產(chǎn)生子請求。對子請求,它不一定有用的,而且如果整個規(guī)則集都起作用, 它甚至可能會引發(fā)錯誤。所以,可以用這個標(biāo)記來排除某些規(guī)則。
根據(jù)你的需要遵循以下原則: 如果你使用了有CGI腳本的URL前綴,以強(qiáng)制它們由CGI腳本處理, 而對子請求處理的出錯率(或者開銷)很高,在這種情況下,可以使用這個標(biāo)記。
nocase|NC (忽略大小寫 no case)
它使Pattern忽略大小寫,即, 在Pattern與當(dāng)前URL匹配時,’A-Z’ 和’a-z’沒有區(qū)別。
qsappend|QSA (追加請求串 query string append)
此標(biāo)記強(qiáng)制重寫引擎在已有的替換串中追加一個請求串,而不是簡單的替換。 如果需要通過重寫規(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)義為等值的十六進(jì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)記強(qiáng)制重寫引擎將內(nèi)部結(jié)構(gòu) request_rec中的uri字段設(shè)置為 filename字段的值,它只是一個小修改,使之能對來自其他URI到文件名翻譯器的 Alias,ScriptAlias, Redirect 等指令的輸出進(jìn)行后續(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)記強(qiáng)制重寫引擎跳過當(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可以包含可擴(kuò)展的反向引用的正則表達(dá)式$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} ^andelse.com [OR]
RewriteCond %{REMOTE_HOST} ^*.andelse.com
RewriteRule …針對這2個主機(jī)的規(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進(jìn)行了處理。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進(jìn)行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.andelse.cn/index.html  -> http://www.andelse.cn/index.php
RewriteRule ^test([0-9]*).html$ test.php?id=$1
比如:http://www.andelse.cn/test8.html  -> http://www.andelse.cn/test.php?id=8
RewriteRule ^cat-([0-9]+)-([0-9]+)\.html$ cat.php?id1=$1&id2=$2
比如:http://www.andelse.cn/cat-1-3.html -> http://www.andelse.cn/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.andelse.cn/cat-zbc2ac-3-5.html -> http://www.andelse.cn/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.andelse.cn/cat1-4-3-8.html -> http://www.andelse.cn/cat1.php?id1=4&id2=3&id3=8
RewriteRule ^cat([0-9]*)/$ cat.php?id1=$1
比如:http://www.andelse.cn/cat5/ -> http://www.andelse.cn/cat.php?id1=5
RewriteRule ^catm([0-9]*)/([0-9]*)/$ catm.php?id1=$1&id2=$2
比如:http://www.andelse.cn/catm6/3/ -> http://www.andelse.cn/catm.php?id1=6&id2=3
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
RewriteCond指令格式
.htaccess詳解及.htaccess參數(shù)說明
Apache的rewrite詳解
URL重寫指南 - Apache HTTP服務(wù)器
學(xué)習(xí)Apache
apache的虛擬域名rewrite配置以及.htaccess的使用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服