.htaccess簡單的語法規則和flags

RewriteCond語法
RewriteCond TestString CondPattern [flags]
rewritecond的其餘用法:
  • "-d"(目錄)php

    將TestString視爲一個路徑名並測試它是否爲一個存在的目錄。java

  • "-f"(常規文件)正則表達式

    將TestString視爲一個路徑名並測試它是否爲一個存在的常規文件。apache

  • "-s"(非空的常規文件)安全

    將TestString視爲一個路徑名並測試它是否爲一個存在的、尺寸大於0的常規文件。服務器

  • "-l"(符號鏈接)cookie

    將TestString視爲一個路徑名並測試它是否爲一個存在的符號鏈接。app

  • "-x"(可執行)dom

    將TestString視爲一個路徑名並測試它是否爲一個存在的、具備可執行權限的文件。該權限由操做系統檢測。post

  • "-F"(對子請求存在的文件)

    檢查TestString是否爲一個有效的文件,並且能夠在服務器當前的訪問控制配置下被訪問。它使用一個內部子請求來作檢查,因爲會下降服務器的性能,因此請謹慎使用!

  • "-U"(對子請求存在的URL)

    檢查TestString是否爲一個有效的URL,並且能夠在服務器當前的訪問控制配置下被訪問。它使用一個內部子請求來作檢查,因爲會下降服務器的性能,因此請謹慎使用!

RewriteRule語法:
RewriteRule Pattern Substitution [flags]

  • ‘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’標記。

  • "chain|C"(連接下一規則)

    此標記使當前規則與下一個規則相連接。它產生這樣的效果:若是一個規則被匹配,則繼續處理其後繼規則,也就是這個標記不起做用;若是該規則不被匹配,則其後繼規則將被跳過。好比,在一個目錄級規則中執行一個外部重定向時,你可能須要刪除」.www」(此處不該該出現」.www」)。

  • "cookie|CO=NAME:VAL:domain[:lifetime[:path]]"(設置cookie)

    在客戶端設置一個cookie。cookie的名稱是NAME,值是VAL。domain是該cookie的域,好比".apache.org",可選的lifetime是cookie的有效期(分鐘),可選的path是cookie的路徑。

  • "env|E=VAR:VAL"(設置環境變量)

    此標記將環境變量VAR的值爲VAL,VAL能夠包含可擴展的正則表達式反向引用($N和%N)。此標記能夠屢次使用以設置多個變量。這些變量能夠在其後許多狀況下被間接引用,一般是在XSSI(<!–#echo var=」VAR」–>)或CGI($ENV{"VAR"})中,也能夠在後繼的RewriteCond指令的CondPattern參數中經過% {ENV:VAR}引用。使用它能夠記住從URL中剝離的信息。

  • "forbidden|F"(強制禁止URL)

    強制禁止當前URL,也就是當即反饋一個HTTP響應碼403(被禁止的)。使用這個標記,能夠連接若干個RewriteConds來有條件地阻塞某些URL。

  • "gone|G"(強制廢棄URL)

    強制當前URL爲已廢棄,也就是當即反饋一個HTTP響應碼410(已廢棄的)。使用這個標記,能夠標明頁面已經被廢棄而不存在了。

  • "handler|H=Content-handler"(強制指定內容處理器)

    強自制定目標文件的內容處理器爲Content-handler。例如,用來模擬mod_alias模塊的ScriptAlias指令,以強制映射文件夾內的全部文件都由」cgi-script」處理器處理。

  • "last|L"(結尾規則)

    當即中止重寫操做,並再也不應用其餘重寫規則。它對應於Perl中的last命令或C語言中的break命令。這個標記用於阻止當前已被重寫的URL被後繼規則再次重寫。例如,使用它能夠重寫根路徑的URL("/")爲實際存在的URL(好比:"/e/www/")。

  • "next|N"(從頭再來)

    從新執行重寫操做(從第一個規則從新開始)。此時再次進行處理的URL已經不是原始的URL了,而是經最後一個重寫規則處理過的URL。它對應於 Perl中的next命令或C語言中的continue命令。此標記能夠從新開始重寫操做(當即回到循環的開頭)。可是要當心,不要製造死循環!

  • "nocase|NC"(忽略大小寫)

    它使Pattern忽略大小寫,也就是在Pattern與當前URL匹配時,"A-Z"和"a-z"沒有區別。

  • "noescape|NE"(在輸出中不對URI進行轉義)

    此標記阻止mod_rewrite對重寫結果應用常規的URI轉義規則。 通常狀況下,特殊字符("%", "$", ";"等)會被轉義爲等值的十六進制編碼("%25′, "%24′, "%3B"等)。此標記能夠阻止這樣的轉義,以容許百分號等符號出如今輸出中。

    好比:RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]

    可使"/foo/zed轉向到一個安全的請求"/bar?arg=P1=zed"。

  • "nosubreq|NS"(不對內部子請求進行處理)

    在當前請求是一個內部子請求時,此標記強制重寫引擎跳過該重寫規則。好比,在mod_include試圖搜索目錄默認文件(index.xxx) 時,Apache會在內部產生子請求。對於子請求,重寫規則不必定有用,並且若是整個規則集都起做用,它甚至可能會引起錯誤。因此,能夠用這個標記來排除某些規則。

    使用原則:若是你爲URL添加了CGI腳本前綴,以強制它們由CGI腳本處理,但對子請求處理的出錯率(或者資源開銷)很高,在這種狀況下,可使用這個標記。

  • "proxy|P"(強制爲代理)

    此標記使替換成分被內部地強制做爲代理請求發送,並當即中斷重寫處理,而後把處理移交給mod_proxy模塊。你必須確保此替換串是一個可以被 mod_proxy處理的有效URI(好比以http://hostname開頭),不然將獲得一個代理模塊返回的錯誤。使用這個標記,能夠把某些遠程成分映射到本地服務器域名空間,從而加強了ProxyPass指令的功能。

    注意:要使用這個功能,必須已經啓用了mod_proxy模塊。

  • "passthrough|PT"(移交給下一個處理器)

    此標記強制重寫引擎將內部request_rec結構中的uri字段設置爲filename字段的值,這個小小的修改使得RewriteRule指令的輸出可以被(從URI轉換到文件名的)Alias, ScriptAlias, Redirect等指令進行後續處理

    [原文:This flag is just a hack to enable post-processing of the output of RewriteRule directives, using Alias, ScriptAlias, Redirect, and other directives from various URI-to-filename translators.]。

    舉一個能說明其含義的例子: 若是要將/abc重寫爲/def, 而後再使用mod_alias將/def轉換爲/ghi,能夠這樣:

    RewriteRule ^/abc(.*) /def$1 [PT]
    Alias /def /ghi

    若是省略了PT標記,雖然將uri=/abc/…重寫爲filename=/def/…的部分運做正常,可是後續的mod_alias在試圖將URI轉換到文件名時會遭遇失效。

    注意:若是須要混合使用多個將URI轉換到文件名的模塊時,就必須使用這個標記。。此處混合使用mod_alias和mod_rewrite就是個典型的例子。

  • "qsappend|QSA"(追加查詢字符串)

    此標記強制重寫引擎在已有的替換字符串中追加一個查詢字符串,而不是簡單的替換。若是須要經過重寫規則在請求串中增長信息,就可使用這個標記。

  • "redirect|R [=code]"(強制重定向)

    若Substitution以http://thishost[:thisport]/(使新的URL成爲一個URI)開頭,能夠強制性執行一個外部重定向。若是沒有指定code,則產生一個HTTP響應碼302(臨時性移動)。若是須要使用在300-400範圍內的其餘響應代碼,只需在此指定便可 (或使用下列符號名稱之一:temp(默認), permanent, seeother)。使用它能夠把規範化的URL反饋給客戶端,如將」/~」重寫爲」/u/」,或始終對/u/user加上斜槓,等等。

    注意:在使用這個標記時,必須確保該替換字段是一個有效的URL。不然,它會指向一個無效的位置!而且要記住,此標記自己只是對URL加上 http://thishost[:thisport]/前綴,重寫操做仍然會繼續進行。一般,你還會但願中止重寫操做而當即重定向,那麼就還須要使用"L'標記。

  • "skip|S=num"(跳事後繼規則)

    此標記強制重寫引擎跳過當前匹配規則以後的num個規則。它能夠模擬if-then-else結構:最後一個規則是then從句,而被跳過的skip=N個規則是else從句。注意:它和"chain|C"標記是不一樣的!

  • "type|T=MIME-type"(強制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]

相關文章
相關標籤/搜索