.htaccess文件RewriteRule語法規則


.htaccess文件是運行Apache Web Server的Web服務器的配置文件,對配置和重定向Apache Web Server文件系統很有用。請記住.htaccess文件將采用隱藏格式。沒有人可以通過URL直接看到它。

.htaccess文件有很多用途。在這里,我將討論.htaccess文件RewriteRule語法規則。

 

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 —— 測試字符串所指文件是否有“非零”值

資源搜索網站大全 http://www.szhdn.com 廣州VI設計公司https://www.houdianzi.com

.htaccess文件需要注意的地方:  

1、找到配置文件httpd.conf,將override的值改成all。如下圖:(如果不設置成all,apache將忽略.htaccess文件)

2、找到配置文件httpd.conf,加載指定的模塊,如下圖:(一般都是加載了指定模塊,然后在配置.htaccess文件才有效)

以下是常用的.htaccess配置: 

#去掉網址的index.php字符串 RewriteEngine on RewriteBase / RewriteCond %{REGUEST_FILENAME} !-f RewriteCond %{REGUEST_FILENAME} !-d #設置public字符串不跳轉是要訪問資源文件 RewriteRule !^(index.php|public) aaa/index.php [L] #去掉網址的index.php字符串 #GZIP壓縮模塊配置 <ifmodule mod_deflate.c> #啟用對特定MIME類型內容的壓縮 SetOutputFilter DEFLATE #設置不要壓縮的文件 SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|exe|t?gz|zip|bz2|sit|rar|pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary #設置要壓縮的文件 AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-httpd-php application/x-JavaScript </ifmodule> #GZIP壓縮模塊配置 #文件緩存時間配置 <FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css)$"> Header set Cache-Control "max-age=0" </FilesMatch> #文件緩存時間配置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM