流行的重写标志
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]