例子:
rewriteengine on 開啟引擎
rewriterule test.html /test.php [l]
rewriterule test.html?$ /tianqi.php?s1=&s2=&s3= [qsa,l] 用於多個引數的情況
rewriterule tianqi-([0-9]+).html /tianqi.php?id=$1 [l]
注意路徑的問題。
text:
. 匹配任意單個字元
[chars] 匹配當前字元
[^chars] 不匹配當前字元
text1|text2 包含text1或者text2任何乙個
quantifiers:
? 零個或者乙個?號前的字元
* 零個或者任意個任意長度的任意字元
乙個或者任意個任意長度的字元
anchors:
^ 匹配內容開始標記
$ 匹配內容結束標記
escaping:
char 使用來進行特殊字元的轉義,包括".()"等字元的轉義
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'標記.
'forbidden|f' (強制url為被禁止的 forbidden)
強制當前url為被禁止的,即,立即反饋乙個http響應**403(被禁止的)。 使用這個標記,可以鏈結若干rewriteconds以有條件地阻塞某些url。
'gone|g' (強制url為已廢棄的 gone)強制當前url為已廢棄的,即,立即反饋乙個http響應**410(已廢棄的)。 使用這個標記,可以標明頁面已經被廢棄而不存在了.
'proxy|p' (強制為** proxy)此 標記使替換成分被內部地強制為**請求,並立即(即, 重寫規則處理立即中斷)把處理移交給**模組。 你必須確保此替換串是乙個有效的(比如常見的以 http://hostname開頭的)能夠為apache**模組所處理的uri。 使用這個標記,可以把某些遠端成分對映到本地伺服器命名空間, 從而增強了proxypass指令的功能。 注意: 要使用這個功能,**模組必須編譯在apache伺服器中。 如果你不能確定,可以檢查``httpd -l''的輸出中是否有mod_proxy.c。 如果有,則mod_rewrite可以使用這個功能; 如果沒有,則必須啟用mod_proxy並重新編譯``httpd''程式。
'last|l' (最後乙個規則 last)立 即停止重寫操作,並不再應用其他重寫規則。 它對應於perl中的last命令或c語言中的break命令。 這個標記可以阻止當前已被重寫的url為其後繼的規則所重寫。 舉例,使用它可以重寫根路徑的url('/')為實際存在的url, 比如, '/e/www/'.
'next|n' (重新執行 next round)重新執行重寫操作(從第乙個規則重新開 始). 這時再次進行處理的url已經不是原始的url了,而是經最後乙個重寫規則處理的url。 它對應於perl中的next命令或c語言中的continue命令。 此標記可以重新開始重寫操作,即, 立即回到迴圈的頭部。但是要小心,不要製造死迴圈!
'chain|c' (與下乙個規則相鏈結 chained)此 標記使當前規則與下乙個(其本身又可以與其後繼規則相鏈結的, 並可以如此反覆的)規則相鏈結。 它產生這樣乙個效果: 如果乙個規則被匹配,通常會繼續處理其後繼規則, 即,這個標記不起作用;如果規則不能被匹配, 則其後繼的鏈結的規則會被忽略。比如,在執行乙個外部重定向時, 對乙個目錄級規則集,你可能需要刪除``.www'' (此處不應該出現``.www''的)。
'nosubreq|ns' (僅用於不對內部子請求進行處理 no internal sub-request)在 當前請求是乙個內部子請求時,此標記強制重寫引擎跳過該重寫規則。 比如,在mod_include試圖搜尋可能的目錄預設檔案(index.***)時, apache會內部地產生子請求。對子請求,它不一定有用的,而且如果整個規則集都起作用, 它甚至可能會引發錯誤。所以,可以用這個標記來排除某些規則。 根據你的需要遵循以下原則: 如果你使用了有cgi指令碼的url字首,以強制它們由cgi指令碼處理, 而對子請求處理的出錯率(或者開銷)很高,在這種情況下,可以使用這個標記。
'nocase|nc' (忽略大小寫 no case)它使pattern忽略大小寫,即, 在pattern與當前url匹配時,'a-z' 和'a-z'沒有區別。
'noescape|ne' (在輸出中不對uri作轉義 no uri escaping)此 標記阻止mod_rewrite對重寫結果應用常規的uri轉義規則。 一般情況下,特殊字元(如'%', '$', ';'等)會被轉義為等值的十六進製制編碼。 此標記可以阻止這樣的轉義,以允許百分號等符號出現在輸出中,如: rewriterule /foo/(.*) /bar?arg=p1/%3d$1 [r,ne]
可以使'/foo/zed'轉向到乙個安全的請求'/bar?arg=p1=zed'.
'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。
'skip|s=num' (跳過後繼的規則 skip)此標記強制重寫引擎跳過當前匹配規則後繼的num個規則。 它可以實現乙個偽if-then-else的構造: 最後乙個規則是then從句,而被跳過的skip=n個規則是else從句. (它和'chain|c'標記是不同的!)
'env|e=var:val' (設定環境變數 environment variable)此 標記使環境變數var的值為val, val可以包含可擴充套件的反向引用的正規表示式$n和%n。 此標記可以多次使用以設定多個變數。 這些變數可以在其後許多情況下被間接引用,但通常是在xssi (via or cgi (如 $env)中, 也可以在後繼的rewritecond指令的pattern中通過%作引用。 使用它可以從url中剝離並記住一些資訊。
'cookie|co=name:val:domain[:lifetime[:path]]' (設定cookie)它在客戶端瀏覽器上設定乙個cookie。 cookie的名稱是name,其值是val。 domain欄位是該cookie的域,比如'.apache.org', 可選的lifetime是cookie生命期的分鐘數, 可選的path是cookie的路徑。
附:path_info的讀取
url方式: test.php/s1/2/s2/3
if(!empty($_server['path_info']))
}
Apache rewrite規則寫法
1 r code force redirect 強制外部重定向 強制在替代字串加上http thishost thisport 字首重定向到外部的url.如果code不指定,將用預設的302 http狀態碼。2 f force url to be forbidden 禁用url,返回403http狀...
Apache Rewrite 靜態配置
1 mod rewrite 簡介和配置 rewirte主要的功能就是實現url的跳轉和隱藏真實位址,基於perl語言的正規表示式規範。平時幫助我們實現擬靜態,擬目錄,網域名稱跳轉,防止盜鏈等 如乙個普通訪問位址為 php100.php?id 2 可以轉成 php100 2.html 或轉成 php1...
Apache Rewrite 擬靜態配置
apache rewrite擬靜態配置 1 apache配置 支援httpd.conf 配置和目錄 htaccess配置 啟用 rewrite loadmodule rewrite module modules mod rewrite.so 去除前面的 loadmodule rewrite modu...