流行的重写标志

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]