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