Apache rewrite常用Flag整理

.htaccess标志列表

  • C(用下一个规则链接)
  • CO = cookie(设定指定的cookie)
  • E = var:value(设置环境变量var为值)
  • F(禁止 – 向用户发送403标题)
  • G(已经不再存在)
  • H = handler(set handler)
  • L(最后停止处理规则)
    ** 最后一条规则:指示在处理上述指令后,服务器停止重写。 **

  • N(下一个 – 继续处理规则)

  • NC(不区分大小写)
  • NE(不要在输出中转义特殊的URL字符)
  • NS(忽略此规则,如果请求是子请求)
  • P(代理 – 即apache应该抓取替换部分指定的远程内容并返回)
  • PT(通过 – 使用额外的处理程序处理URL时使用,例如mod_alias)
  • R(临时重定向到新网址)
  • R = 301(永久重定向到新网址)
  • QSA(将请求中的查询字符串追加到替换的URL)
  • S = x(跳过下一个x规则)
  • T = mime类型(强制指定MIME类型)

标记被添加到重写规则的末尾,以告诉Apache如何解释和处理规则。它们可以用于告诉apache将规则视为不区分大小写,如果当前匹配则停止处理规则,或者其他各种选项。它们以逗号分隔,并包含在方括号中。

QSA标志意味着在URI被重写附加现有的查询字符串。例:

URL =http://example.com/foo/bar?q=blah

规则:

RewriteRule ^foo/(.*)$ /index.php?b=$1

结果=/index.php?b=bar

注意如何q=blah消失 因为现有的查询字符串在规则的目标中被丢弃,(b = $ 1)。现在如果你包括一个QSA标志:

RewriteRule ^foo/(.*)$ /index.php?b=$1 [QSA]

结果变成=/index.php?b=bar&q=blah


L标志仅仅意味着停止将遵循任何规则。给定相同的URL,http://example.com/foo/bar?q=blah并给出规则:

RewriteRule ^foo - 

RewriteCond %{REQUEST_URI} !^/bar.php
RewriteRule ^(.*)$ /bar.php?z=$1 

第一个规则被应用,URI通过不变的(通过-目标)传递。重写引擎然后处理下一个规则,URI被重写/bar.php?z=foo/bar。当您添加L到最后时会发生什么:

RewriteRule ^foo - [L]

RewriteCond %{REQUEST_URI} !^/bar.php
RewriteRule ^(.*)$ /bar.php?z=$1 

网址http://example.com/foo/bar从第一条规则未经修改,然后由于标志而停止L。如果URL是http://example.com/something/else第一个规则不匹配并且第二个规则被应用,则将该URI重写为:/bar.php?z=something/else

请注意,由于重写引擎循环遍历所有规则,直到URI停止更改,该L标志不会阻止循环,只有任何其他规则才能在当前迭代中应用。

发表评论