標籤:指令 代理 clu 重寫 維護 沒有 有一個 管道符 log
# # --位於行首時表示注釋。 [F] —— Forbidden(禁止): 命令伺服器返回 403 Forbidden錯誤給使用者瀏覽器 [L] —— Last rule(最後一條規則): 告訴伺服器在本條規則執行完後停止重寫URL。立即停止重寫操作,並不再應用其他重寫規則。它對應於Perl中的last命令或C語言中的break命令。這個標記用於阻止當前已被重寫的URL被後繼規則再次重寫。例如,使用它可以重寫根路徑的URL(“/”)為實際存在的URL(比如:”/e/www/”)。 [N] —— Next(下一條規則): 告訴伺服器繼續重寫,指導所有重寫指令都執行過。重新執行重寫操作(從第一個規則重新開始)。此時再次進行處理的URL已經不是原始的URL了,而是經最後一個重寫規則處理過的URL。它對應於Perl中的next命令或C語言中的continue命令。此標記可以重新開始重寫操作(立即回到迴圈的開頭)。但是要小心,不要製造死迴圈! [G] —— Gone(丟失): 命令伺服器返回410 GONE(no longer exists)錯誤訊息 [P] —— Proxy(代理): 告訴伺服器通過mod_proxy模組處理使用者請求 [C] —— Chain(捆綁): 告訴伺服器將當前的規則和前面的規則進行捆綁 “redirect|R [=code]“(強制重新導向) [R] —— Redirect(重新導向): 命令伺服器發出重新導向訊息,以便使用者瀏覽器發出rewritten/modified(重寫/修改)URL的請求。若Substitution以http://thishost[:thisport]/(使新的URL成為一個URI)開頭,可以強制性執行一個外部重新導向。如果沒有指定code,則產生一個HTTP響應碼302(臨時性移動)。如果需要使用在300-400範圍內的其他響應代碼,只需在此指定即可(或使用下列符號名稱之一:temp(預設), permanent,seeother)。使用它可以把正常化的URL反饋給用戶端,如將”/~”重寫為”/u/”,或始終對/u/user加上斜杠,等等。注意:在使用這個標記時,必須確保該替換欄位是一個有效URL。否則,它會指向一個無效的位置!並且要記住,此標記本身只是對URL加上http://thishost[:thisport]/首碼,重寫操作仍然會繼續進行。通常,你還會希望停止重寫操作而立即重新導向,那麼就還需要使用”L’標記。 [NC] —— No Case(不區分大小寫): 對用戶端請求的URL不區分大小寫。它使Pattern忽略大小寫,也就是在Pattern與當前URL匹配時,”A-Z”和”a-z”沒有區別 [PT] —— Pass Through(允許存取): 讓mod_rewrite模組將重寫的URL傳回給Apache做進一步處理 [OR] —— Or(邏輯或): 用邏輯“或”將兩個運算式串連在一起,如果結果為“真”,則會應用後繼的相關規則 [NE] —— No Escape(禁用轉義): 命令伺服器在輸出時禁用逸出字元標記阻止mod_rewrite對重寫結果應用常規的URI轉義規則。 一般情況下,特殊字元(“%”, “$”,“;”等)會被轉義為等值的十六進位編碼(“%25′, “%24′,“%3B”等)。此標記可以阻止這樣的轉義,以允許百分比符號等符號出現在輸出中,比如:RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE] 可以使”/foo/zed轉向到一個安全的請求”/bar?arg=P1=zed”。 [NS] —— No Subrequest(禁用子請求): 如果存在內部子請求,則跳過當前命令。在當前請求是一個內部子請求時,此標記強制重寫引擎跳過該重寫規則。比如,在mod_include試圖搜尋目錄預設檔案(index.xxx)時,Apache會在內部產生子請求。對於子請求,重寫規則不一定有用,而且如果整個規則集都起作用,它甚至可能會引發錯誤。所以,可以用這個標記來排除某些規則。使用原則:如果你為URL添加了CGI指令碼首碼,以強制它們由CGI指令碼處理,但對子請求處理的出錯率(或者資源開銷)很高,在這種情況下,可以使用這個標記。 [QSA] —— Append Query String(新增查詢字串): 命令伺服器在URL末尾新增查詢字串,以維護GET的URL參數. [S=x] —— Skip(跳過): 如果滿足某指定的條件,則跳過後面第x調規則 [E=variable:value] —— Environmental Variable(環境變數): 命令伺服器將值value賦給變數variable [T=MIME-type] —— Mime Type(MIME類型): 聲明目標資源所屬的MIME類型。強制目標檔案的MIME類型為MIME-type,可以用來基於某些特定條件強制設定內容類型。比如,下面的指令可以讓.PHP檔案在以.phps副檔名調用的情況下由mod_php按照PHP原始碼的MIME類型(application/x-httpd-php-source)顯示: RewriteRule ^(.+\.php)s$ $1 [T=application/x-httpd-php-source] [] —— 匹配一個字元集合,例如[xyz]可以匹配x, y或者z []+ —— 例如[xyz]+會以任何順序、次數匹配x,y,z的出現 [^] —— 字元^表示字元集的補集。[^xyz]將匹配沒有x,y或者z的字串 [a-z] —— 連字號(-)表示匹配從字母a到字母z的所有字串 a{n} —— 指定字母a出現的次數為n次,滿足該條件時匹配。例如x{3}僅與xxx匹配 a{n,} —— 指定字母a出現的次數至少為n次,例如x{3,}可以與xxx或者xxxx等匹配 a{n,m} —— 指定a出現的次數至少為n到m次。 () —— 用於將Regex分組,滿足第一組Regex的字串會被儲存在變數$1中,以此類推。如果括弧中的不是Regex,例如(perishable)?press 將能夠匹配有或者沒有perishable首碼的press ^ —— 位於行首。注意:和中括弧中的[^]意義不同。 $ —— 位於行末 ? —— 例如 monzas? 會匹配 monza 或者 monzas,而 mon(za)? 會匹配 mon 或者 monza。又如 x? 會匹配“Null 字元” 或者 一個x ! —— 邏輯非。例如“!string” 將會匹配除了“string”以外的所有字串 . —— 表示任一字元串 – —— 命令Apache“不要”重寫URL,例如“xxx.domain.com.* – [F]” + —— 匹配至少一個任一字元,例如G+匹配以G開頭、並且後面至少有一個字元的字串 * —— 匹配零個或多個字元,例如“.*”匹配任一字元串 | —— 邏輯“或”,與[OR]不同的是,它只匹配字串,例如(x|y)匹配x或者y \ —— 逸出字元。可以轉義左括弧( 尖字元^ 貨幣符號$ 驚嘆號! 點. 星號* 管道符號| 右括弧) 等 \. —— 轉義為點字元(點字元在Regex中可以匹配任一字元) /* —— 零個或多個正斜杠 .* —— 零個或多個任一字元(即,匹配任一字元串,包括Null 字元) ^$ —— 匹配“Null 字元”、“空行” ^.*$ —— 匹配任一字元串(僅限一行) [^/.] —— 匹配既非“正斜杠”也不是“點”的任一字元 [^/.]+ —— 匹配第一個字元既非“正斜杠”也不是“點”,後繼字元可以是“正斜杠”或者“點”的字串 http:// —— 匹配“http://” ^domain.* —— 匹配以“domain”開始的字串 ^domain\.com$ —— 僅匹配“domain.com” -d —— 測試字串是否是已存在的目錄 -f —— 測試字串是否是已存在的檔案 -s —— 測試字串所指檔案是否有“非零”值
轉載 .htaccess檔案RewriteRule文法規則