以下指命令的作用域都是.htaccess

轉自:http://www.cccspace.net/b/htaccess.html

RewriteEngine On|Off

RewriteEngine 可用On 或者 Off 打開或關閉rewrite功能。
rewrite configurations 不會繼承,所以你得給每個你想用 rewrite功能的virtual host加上這個指令。

RewriteBase URL-path

RewriteBase指令顯式地設置了目錄級重寫的基準URL。在下文中,你可以看見RewriteRule可以用於目錄級的配置文件中 (.htaccess)並在局部範圍內起作用,即規則實際處理的只是剝離了本地路徑前綴的一部分。處理結束後,這個路徑會被自動地附着回去。默認值 是"RewriteBase physical-directory-path"。
在對一個新的URL進行替換時,此模塊必須把這個URL重新注入到服務器處理中。爲此,它必須知道其對應的URL前綴或者說URL基準。通常,此前綴就是 對應的文件路徑。但是,大多數網站URL不是直接對應於其物理文件路徑的,因而一般不能做這樣的假定! 所以在這種情況下,就必須用RewriteBase指令來指定正確的URL前綴。
如果你的網站服務器URL不是與物理文件路徑直接對應的,而又需要使用RewriteBase指令,則必須在每個對應的.htaccess文件中指定RewriteRule 。

RewriteCond TestString CondPattern

RewriteCond指令定義了一個規則的條件,即在一個RewriteRule指令之前有一個或多個RewriteCond指令。條件之後的重寫規則僅在當前URI與pattern匹配並且符合這些條件的時候纔會起作用。
Notice:All of these tests can also be prefixed by an exclamation mark ('!') to negate their meaning. 在正則表達式中,如果取反的話要用^,在這裏需要用!號取反

RewriteOptions Options

Sets some special options for the rewrite engine.
設定一些特殊的選項給rewrite.
The Option string can be currently only one:inherit
inherit
此值強制當前配置可以繼承其父配置。 在虛擬主機級配置中,它意味着主服務器的映射表、條件和規則可以被繼承。 在目錄級配置中,它意味着其父目錄的.htaccess中的條件和規則可以被繼承。
MaxRedirects=number
爲了避免目錄級RewriteRule的無休止的內部重定向, 在此類重定向和500內部服務器錯誤次數達到一個最大值的時候, mod_rewrite會停止對此請求的處理。 如果你確實需要對每個請求允許大於10次的內部重定向,可以增大這個值。
This forces the current configuration to inherit the configuration of the parent.
強制當前的配置繼承它parent的配置。
在per-virtual-server環境下,意味着maps, conditions , rules會被繼承!
在per-directory 環境下 意味着它父目錄的.htaccess配置中的conditions , rules 會被繼承!

RewriteRule Pattern Substitution [flags]

 

Text:
  .           任何單字符
  [chars]     Character class: One  of chars
  [^chars]    Character class: None of chars
  text1|text2 兩者選一個: text1 or text2

Quantifiers:量詞
  ?           0 or 1 of the 前面的 text
  *           0 or N of the 前面的 text (N > 0)
  +           1 or N of the 前面的 text (N > 1)

Grouping:
  (text)      Grouping of text

可用$N來得到()中的內容:
 ( (a|b) | (c|d))
$1 $2      $3  

Anchors:
  ^           Start of line anchor
  $           End   of line anchor

Escaping:
  \char       escape that particular char
              (for instance to specify the chars ".[]()" etc.)


注意:沒有並且&

=========================================================================================
flags

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

    以http://thishost[:thisport]/(使新的URL成爲一個URI) 爲前綴的Substitution可以強制性執行一個外部重定向。 如果code沒有指定,則產生一個HTTP響應代碼302(臨時性移動)。 如果需要使用在300-400範圍內的其他響應代碼,只需在此指定這個數值即可, 另外,還可以使用下列符號名稱之一: temp (默認的), permanent, seeother. 用它可以把規範化的URL反饋給客戶端,如, 重寫``/~''爲 ``/u/'',或對/u/user加上斜槓,等等。 注意: 在使用這個標記時,必須確保該替換字段是一個有效的URL! 否則,它會指向一個無效的位置! 並且要記住,此標記本身只是對URL加上 http://thishost[:thisport]/的前綴,重寫操作仍然會繼續。 通常,你會希望停止重寫操作而立即重定向,則還需要使用'L'標記.
  2. 'forbidden|F' (強制URL爲被禁止的 forbidden)

    強制當前URL爲被禁止的,即,立即反饋一個HTTP響應代碼403(被禁止的)。 使用這個標記,可以鏈接若干RewriteConds以有條件地阻塞某些URL。
  3. 'gone|G' (強制URL爲已廢棄的 gone)

    強制當前URL爲已廢棄的,即,立即反饋一個HTTP響應代碼410(已廢棄的)。 使用這個標記,可以標明頁面已經被廢棄而不存在了.
  4. 'proxy|P' (強制爲代理 proxy)

    此標記使替換成分被內部地強制爲代理請求,並立即(即, 重寫規則處理立即中斷)把處理移交給代理模塊。 你必須確保此替換串是一個有效的(比如常見的以 http://hostname開頭的)能夠爲Apache代理模塊所處理的URI。 使用這個標記,可以把某些遠程成分映射到本地服務器名稱空間, 從而增強了ProxyPass指令的功能。 注意: 要使用這個功能,代理模塊必須編譯在Apache服務器中。 如果你不能確定,可以檢查``httpd -l''的輸出中是否有mod_proxy.c。 如果有,則mod_rewrite可以使用這個功能; 如果沒有,則必須啓用mod_proxy並重新編譯``httpd''程序。
  5. 'last|L' (最後一個規則 last)

    立即停止重寫操作,並不再應用其他重寫規則。 它對應於Perl中的last命令或C語言中的break命令。 這個標記可以阻止當前已被重寫的URL爲其後繼的規則所重寫。 舉例,使用它可以重寫根路徑的URL('/')爲實際存在的URL, 比如, '/e/www/'.
  6. 'next|N' (重新執行 next round)

    重新執行重寫操作(從第一個規則重新開始). 這時再次進行處理的URL已經不是原始的URL了,而是經最後一個重寫規則處理的URL。 它對應於Perl中的next命令或C語言中的continue命令。 此標記可以重新開始重寫操作,即, 立即回到循環的頭部。 但是要小心,不要製造死循環!
  7. 'chain|C' (與下一個規則相鏈接 chained)

    此標記使當前規則與下一個(其本身又可以與其後繼規則相鏈接的, 並可以如此反覆的)規則相鏈接。 它產生這樣一個效果: 如果一個規則被匹配,通常會繼續處理其後繼規則, 即,這個標記不起作用;如果規則不能被匹配, 則其後繼的鏈接的規則會被忽略。比如,在執行一個外部重定向時, 對一個目錄級規則集,你可能需要刪除``.www'' (此處不應該出現``.www''的)。
  8. 'type|T=MIME-type' (強制MIME類型 type)

    強制目標文件的MIME類型爲MIME-type。 比如,它可以用於模擬mod_alias中的ScriptAlias指令, 以內部地強制被映射目錄中的所有文件的MIME類型爲``application/x-httpd-cgi''.
  9. 'nosubreq|NS' (僅用於不對內部子請求進行處理 no internal sub-request)

    在當前請求是一個內部子請求時,此標記強制重寫引擎跳過該重寫規則。 比如,在mod_include試圖搜索可能的目錄默認文件(index.xxx)時, Apache會內部地產生子請求。對子請求,它不一定有用的,而且如果整個規則集都起作用, 它甚至可能會引發錯誤。所以,可以用這個標記來排除某些規則。 根據你的需要遵循以下原則: 如果你使用了有CGI腳本的URL前綴,以強制它們由CGI腳本處理, 而對子請求處理的出錯率(或者開銷)很高,在這種情況下,可以使用這個標記。
  10. 'nocase|NC' (忽略大小寫 no case)

    它使Pattern忽略大小寫,即, 在Pattern與當前URL匹配時,'A-Z' 和'a-z'沒有區別。
  11. 'qsappend|QSA' (追加請求串 query string append)

    此標記強制重寫引擎在已有的替換串中追加一個請求串,而不是簡單的替換。 如果需要通過重寫規則在請求串中增加信息,就可以使用這個標記。
  12. 'noescape|NE' (在輸出中不對URI作轉義 no URI escaping)

    此標記阻止mod_rewrite對重寫結果應用常規的URI轉義規則。 一般情況下,特殊字符(如'%', '$', ';'等)會被轉義爲等值的十六進制編碼。 此標記可以阻止這樣的轉義,以允許百分號等符號出現在輸出中,如: RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
    可以使'/foo/zed'轉向到一個安全的請求'/bar?arg=P1=zed'.
  13. 'passthrough|PT' (移交給下一個處理器 pass through)

    此標記強制重寫引擎將內部結構 request_rec中的uri字段設置爲 filename字段的值,它只是一個小修改,使之能對來自其他URI到文件名翻譯器的 Alias,ScriptAlias, Redirect 等指令的輸出進行後續處理。舉一個能說明其含義的例子: 如果要通過mod_rewrite的重寫引擎重寫/abc爲/def, 然後通過mod_alias使/def轉變爲/ghi,可以這樣: RewriteRule ^/abc(.*) /def$1 [PT]
    Alias /def /ghi
    如果省略了PT標記,雖然mod_rewrite運作正常, 即, 作爲一個使用API的URI到文件名翻譯器, 它可以重寫uri=/abc/...爲filename=/def/..., 但是,後續的mod_alias在試圖作URI到文件名的翻譯時,則會失效。
    注意: 如果需要混合使用不同的包含URI到文件名翻譯器的模塊時, 就必須使用這個標記。混合使用mod_alias和mod_rewrite就是個典型的例子。

    For Apache hackers
    如果當前Apache API除了URI到文件名hook之外,還有一個文件名到文件名的hook, 就不需要這個標記了! 但是,如果沒有這樣一個hook,則此標記是唯一的解決方案。 Apache Group討論過這個問題,並在Apache 2.0 版本中會增加這樣一個hook。
  14. 'skip|S=num' (跳過後繼的規則 skip)

    此標記強制重寫引擎跳過當前匹配規則後繼的num個規則。 它可以實現一個僞if-then-else的構造: 最後一個規則是then從句,而被跳過的skip=N個規則是else從句. (它和'chain|C'標記是不同的!)
  15. 'env|E=VAR:VAL' (設置環境變量 environment variable)

    此標記使環境變量VAR的值爲VAL, VAL可以包含可擴展的反向引用的正則表達式$N和%N。 此標記可以多次使用以設置多個變量。 這些變量可以在其後許多情況下被間接引用,但通常是在XSSI (via or CGI (如 $ENV{'VAR'})中, 也可以在後繼的RewriteCond指令的pattern中通過%{ENV:VAR}作引用。 使用它可以從URL中剝離並記住一些信息。
  16. 'cookie|CO=NAME:VAL:domain[:lifetime[:path]]' (設置cookie)

    它在客戶端瀏覽器上設置一個cookie。 cookie的名稱是NAME,其值是VAL。 domain字段是該cookie的域,比如'.apache.org', 可選的lifetime是cookie生命期的分鐘數, 可選的path是cookie的路徑。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章