規(guī)則介紹
RewriteEngine On|Off
RewriteEngine 用于開啟或停用rewrite功能
RewriteBase URL-path
重定向URL路徑,一般未寫RewriteBase ’/’
RewriteCond TestString CondPattern [flags]
1、RewriteCond:
指令定義了一個(gè)規(guī)則的條件,即,在一個(gè)RewriteRule指令之前有一個(gè)或多個(gè)RewriteCond指令。
條件之后的重寫規(guī)則僅在當(dāng)前URI與pattern匹配并且符合這些條件的時(shí)候才會(huì)起作用。
2、TestString:
是一個(gè)純文本的字符串,但是還可以包含下列可擴(kuò)展的成分:
3、RewriteRule反向引用:
引用方法是 $N (0 <= N <= 9) 引用當(dāng)前(帶有若干RewriteCond指令的)RewriteRule中的 與pattern匹配的分組成分(圓括號(hào)!)。
4、RewriteCond反向引用:
引用方法是 %N (1 <= N <= 9) 引用當(dāng)前若干RewriteCond條件中最后符合的條件中的分組成分(圓括號(hào)!)。
5、RewriteMap 擴(kuò)展:
引用方法是 ${mapname:key|default}
6、服務(wù)器變量:
引用方法是 %{ NAME_OF_VARIABLE } 這個(gè)是我們最常使用到的功能
7、CondPattern:
是條件pattern, 即, 一個(gè)應(yīng)用于當(dāng)前實(shí)例TestString的正則表達(dá)式, 即, TestString將會(huì)被計(jì)算然后與CondPattern匹配.
可以在pattern串中使用!字符(驚嘆號(hào))來(lái)實(shí)現(xiàn)匹配的反轉(zhuǎn)。
8、flags 參見(jiàn)下表
服務(wù)器變量NAME_OF_VARIABLE具體數(shù)值見(jiàn)下表:
HTTP_USER_AGENT //主要用于檢測(cè)訪問(wèn)者系統(tǒng)和瀏覽器等
HTTP_REFERER //從哪個(gè)頁(yè)面鏈接過(guò)來(lái)
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST //域名
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
API_VERSION //這是正在使用的httpd中(服務(wù)器和模塊之間內(nèi)部接口)的Apache模塊API的版本, 其定義位于include/ap_mmn.h中。此模塊版本對(duì)應(yīng)于正在使用的Apache的版本 (比如,在Apache 1.3.14的發(fā)行版中,這個(gè)值是19990320:10)。 通常,對(duì)它感興趣的是模塊的作者。
THE_REQUEST //這是由瀏覽器發(fā)送給服務(wù)器的完整的HTTP請(qǐng)求行。(比如, “GET /index.html HTTP/1.1″). 它不包含任何瀏覽器發(fā)送的附加頭信息。
REQUEST_URI //這是在HTTP請(qǐng)求行中所請(qǐng)求的資源。
REQUEST_FILENAME //這是與請(qǐng)求相匹配的完整的本地文件系統(tǒng)的文件路徑名或描述.
IS_SUBREQ //如果正在處理的請(qǐng)求是一個(gè)子請(qǐng)求,它包含字符串”true”,否則就是”false”。 模塊為了解析URI中的附加文件,有可能會(huì)產(chǎn)生子請(qǐng)求。
Flags
RewriteRule標(biāo)記 |
含 義 |
描 述 |
R |
Redirect |
發(fā)出一個(gè)HTTP重定向 |
F |
Forbidden |
禁止對(duì)URL地址的存取 |
G |
Gone |
標(biāo)記URL地址不存在 |
P |
Proxy |
將URL地址傳遞給mod_proxy |
L |
Last |
停止處理接下來(lái)的規(guī)則 |
N |
Next |
再次重第一個(gè)規(guī)則開始處理,但是使用當(dāng)前重寫后的URL地址 |
C |
Chain |
將當(dāng)前的規(guī)則和緊隨其后的規(guī)則鏈接起來(lái) |
T |
Type |
強(qiáng)制執(zhí)行指明的MIME類 |
NS |
Nosubreq |
只在沒(méi)有任何內(nèi)部子請(qǐng)求執(zhí)行時(shí)運(yùn)行本腳本 |
NC |
Nocase |
URL地址匹配對(duì)大小寫不敏感 |
QSA |
Qsappend |
在新的URL地址后附加查詢字符串部分,而不是替代 |
PT |
Passthrough |
將重寫后的URL地址傳遞給另一個(gè)Apache模塊進(jìn)行進(jìn)一步處理 |
S |
Skip |
忽略之后的規(guī)則 |
E |
Env |
設(shè)置環(huán)境變量 |
rewritecond的其他用法:
“-d”(目錄)
將TestString視為一個(gè)路徑名并測(cè)試它是否為一個(gè)存在的目錄。
“-f”(常規(guī)文件)
將TestString視為一個(gè)路徑名并測(cè)試它是否為一個(gè)存在的常規(guī)文件。
“-s”(非空的常規(guī)文件)
將TestString視為一個(gè)路徑名并測(cè)試它是否為一個(gè)存在的、尺寸大于0的常規(guī)文件。
“-l”(符號(hào)連接)
將TestString視為一個(gè)路徑名并測(cè)試它是否為一個(gè)存在的符號(hào)連接。
“-x”(可執(zhí)行)
將TestString視為一個(gè)路徑名并測(cè)試它是否為一個(gè)存在的、具有可執(zhí)行權(quán)限的文件。該權(quán)限由操作系統(tǒng)檢測(cè)。
“-F”(對(duì)子請(qǐng)求存在的文件)
檢查TestString是否為一個(gè)有效的文件,而且可以在服務(wù)器當(dāng)前的訪問(wèn)控制配置下被訪問(wèn)。它使用一個(gè)內(nèi)部子請(qǐng)求來(lái)做檢查,由于會(huì)降低服務(wù)器的性能,所以請(qǐng)謹(jǐn)慎使用!
“-U”(對(duì)子請(qǐng)求存在的URL)
檢查TestString是否為一個(gè)有效的URL,而且可以在服務(wù)器當(dāng)前的訪問(wèn)控制配置下被訪問(wèn)。它使用一個(gè)內(nèi)部子請(qǐng)求來(lái)做檢查,由于會(huì)降低服務(wù)器的性能,所以請(qǐng)謹(jǐn)慎使用!
舉例:
1圖片重定向:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^localhost$ //如果域名是localhost
RewriteCond %{REQUEST_FILENAME} !-f //并且訪問(wèn)的文件找不到
RewriteRule ^images/(.+) http://192.168.67.19/test/$1 [R=302,L] //則跳轉(zhuǎn)到另一個(gè)域名下的另一個(gè)目錄訪問(wèn)這個(gè)圖片
2二級(jí)域名重定向到www.baidu.com
rewriteEngine on
rewriteCond %{http_host} ^baidu.com [NC]
rewriteRule ^(.*)$ http://www.baidu.com/$1 [R=301,L]
3設(shè)置404錯(cuò)誤
RewriteEngine on
RewriteCond %{REQUEST_URI} !/test.html$ //如果請(qǐng)求的地址不是test.html
RewriteCond %{REMOTE_ADDR} !^192.168.67.19 //訪問(wèn)ip如果不是這個(gè)
RewriteRule $ /404.html [R=302,L] //則重定向到404.html這個(gè)升級(jí)提醒頁(yè)面
4偽靜態(tài)
RewriteEngine on
RewriteRule ^index.html$ index.php