轉載 .htaccess文件RewriteRule語法規則

 # # --位於行首時表示註釋。
 
    [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次。
 
    () —— 用於將正則表達式分組,知足第一組正則表達式的字符串會被存儲在變量$1中,以此類推。若是括號中的不是正則表達式,例如(perishable)?press 將可以匹配有或者沒有perishable前綴的press
 
    ^ —— 位於行首。注意:和中括號中的[^]意義不一樣。
 
    $ —— 位於行末
 
    ? —— 例如 monzas? 會匹配 monza 或者 monzas,而 mon(za)? 會匹配 mon 或者 monza。又如 x? 會匹配「空字符」 或者 一個x
 
    ! —— 邏輯非。例如「!string」 將會匹配除了「string」之外的全部字符串
 
    . —— 表示任意字符串
 
    – —— 命令Apache「不要」重寫URL,例如「xxx.domain.com.* – [F]」
 
    + —— 匹配至少一個任意字符,例如G+匹配以G開頭、而且後面至少有一個字符的字符串
 
    * —— 匹配零個或多個字符,例如「.*」匹配任意字符串
 
    | —— 邏輯「或」,與[OR]不一樣的是,它只匹配字符串,例如(x|y)匹配x或者y
 
    \ —— 轉義字符。能夠轉義左括號( 尖字符^ 美圓符號$ 感嘆號! 點. 星號* 管道符號| 右括號) 等
 
    \. —— 轉義爲點字符(點字符在正則表達式中能夠匹配任意字符)
 
    /* —— 零個或多個正斜槓
 
    .* —— 零個或多個任意字符(即,匹配任意字符串,包括空字符)
 
    ^$ —— 匹配「空字符」、「空行」
 
    ^.*$ —— 匹配任意字符串(僅限一行)
 
    [^/.] —— 匹配既非「正斜槓」也不是「點」的任意字符
 
    [^/.]+ —— 匹配第一個字符既非「正斜槓」也不是「點」,後繼字符能夠是「正斜槓」或者「點」的字符串
 
    http:// —— 匹配「http://」
 
    ^domain.* —— 匹配以「domain」開始的字符串
 
    ^domain\.com$ —— 僅匹配「domain.com」
 
    -d —— 測試字符串是不是已存在的目錄
 
    -f —— 測試字符串是不是已存在的文件
 
    -s —— 測試字符串所指文件是否有「非零」值

 禁止訪問指定文件:php

<FilesMatch ".(htaccess|gitattributes|gitignore)$">
order allow,deny
deny from all
</FilesMatch>html

<Files .env>
order allow,deny
deny from all
</Files>git

或者重寫規則:正則表達式

RewriteRule ^.env - [F]瀏覽器

相關文章
相關標籤/搜索