流行的重寫標誌

F |禁止

Deny 類似,此標誌強制伺服器立即向請求的瀏覽器或客戶端返回 403 Forbidden 狀態程式碼。

示例:拒絕訪問以 exe 結尾的請求:

RewriteRule .exe$ - [F]

G |不見了

如果請求的資源在過去可用但不再可用,則可以使用此標誌強制伺服器立即向請求的瀏覽器或客戶端返回 410 Gone 狀態程式碼以獲取請求。

示例:告訴訪問者舊產品不再存在:

RewriteRule ^old-product.html$ - [G]

L|最後

在大多數情況下,除了 .htaccess 之外,這個標誌指示 mod_rewrite 停止處理當前條件/規則集,就像 lastbreak(分別是 Perl 和 C)一樣。

但是,在 .htaccess<Directory> 上下文中,使用帶有此標誌的 RewriteRule 重寫的請求將被傳遞迴 URL 解析引擎以進行進一步處理。因此,對於重寫的 URI,可以由相同的上下文處理,並且可能進一步改變。

一般建議使用 END 標誌不僅停止處理當前條件/規則集,而且還防止在這些上下文中進一步重寫。

注意:上面討論的 FG 標誌都隱式使用 L,因此你不需要單獨指定它們。

N |下一

此標誌將從頭開始重新執行重寫過程,從第一個條件/規則集開始。這次,匹配的 URL 不再是原始 URI,而是最後一個規則集返回的重寫 URI。使用此標誌重新啟動重寫過程。

警告: 謹慎使用此標誌,因為它可能會導致無限迴圈!

NC | NOCASE

這指示 mod_rewrite 匹配 RewriteRulePattern 而不區分大小寫。為了澄清,MyIndex.htmlmyindex.html 將被模組視為同一件事。此外,此標誌允許你在正規表示式中使用 a-z 而不是 A-Za-z

[R |重定向

此標誌用於向請求的瀏覽器/客戶端傳送 HTTP 重定向響應。

預設情況下,如果沒有給出程式碼,將返回具有 302 Found (類似於臨時重定向)狀態程式碼的重定向響應。如果你希望使用更永久的重定向,則應使用 302301 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]