流行的重寫標誌
F |禁止
與 Deny
類似,此標誌強制伺服器立即向請求的瀏覽器或客戶端返回 403 Forbidden 狀態程式碼。
示例:拒絕訪問以 exe
結尾的請求:
RewriteRule .exe$ - [F]
G |不見了
如果請求的資源在過去可用但不再可用,則可以使用此標誌強制伺服器立即向請求的瀏覽器或客戶端返回 410 Gone 狀態程式碼以獲取請求。
示例:告訴訪問者舊產品不再存在:
RewriteRule ^old-product.html$ - [G]
L|最後
在大多數情況下,除了 .htaccess
之外,這個標誌指示 mod_rewrite
停止處理當前條件/規則集,就像 last
和 break
(分別是 Perl 和 C)一樣。
但是,在 .htaccess
或 <Directory>
上下文中,使用帶有此標誌的 RewriteRule
重寫的請求將被傳遞迴 URL 解析引擎以進行進一步處理。因此,對於重寫的 URI,可以由相同的上下文處理,並且可能進一步改變。
一般建議使用 END
標誌不僅停止處理當前條件/規則集,而且還防止在這些上下文中進一步重寫。
注意:上面討論的 F
和 G
標誌都隱式使用 L
,因此你不需要單獨指定它們。
N |下一
此標誌將從頭開始重新執行重寫過程,從第一個條件/規則集開始。這次,匹配的 URL 不再是原始 URI,而是最後一個規則集返回的重寫 URI。使用此標誌重新啟動重寫過程。
警告: 謹慎使用此標誌,因為它可能會導致無限迴圈!
NC | NOCASE
這指示 mod_rewrite
匹配 RewriteRule
的 Pattern
而不區分大小寫。為了澄清,MyIndex.html
和 myindex.html
將被模組視為同一件事。此外,此標誌允許你在正規表示式中使用 a-z
而不是 A-Za-z
。
[R |重定向
此標誌用於向請求的瀏覽器/客戶端傳送 HTTP 重定向響應。
預設情況下,如果沒有給出程式碼,將返回具有 302 Found (類似於臨時重定向)狀態程式碼的重定向響應。如果你希望使用更永久的重定向,則應使用 302
( 301 Moved Permanently )狀態程式碼。
通常,此標誌只能使用 300-399 範圍內的狀態程式碼。如果使用此範圍之外的狀態程式碼(這是完全可以接受的),則丟棄替換字串並停止重寫,就好像使用了 L
標誌一樣。在某些情況下,即使請求指向現有資源,這也是強制 404 Not Found 響應的便捷方式。
示例:發出 302 Found 重定向響應:
RewriteRule ^bus$ /train [R,L]
示例:發出 301 Moved Permanently 重定向響應:
RewriteRule ^speed-train$ /hyperloop [R=301,L]
示例:強制 404 未找到 :
RewriteRule ^blip$ - [R=404,L]