htaccess中[QSA,L]的L是多少?

时间:2013-05-09 18:00:43

标签: .htaccess qsa

  

QSA表示如果使用原始URL传递了查询字符串,   它将附加到重写(olle?p = 1将被重写为   ?的index.php URL =奥莱&安培; P = 1

     

L表示如果规则匹配,则不再处理下面的RewriteRules   这个。

嗨,有什么简单的例子来解释L的使用? 我似乎无法理解上面这个解释。任何帮助将受到高度赞赏。 谢谢。

2 个答案:

答案 0 :(得分:69)

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标志仅表示停止应用后面的任何规则。给定相同的网址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标记。如果网址为http://example.com/something/else,则第一条规则不匹配,并应用第二条规则,将URI重写为:/bar.php?z=something/else

请注意,由于重写引擎会遍历所有规则,直到URI停止更改,L标志 迭代。

答案 1 :(得分:54)

.htaccess标志列表

  • C(与下一条规则相关联)
  • CO = cookie(设置指定的cookie)
  • E = var:value(将环境变量var设置为值)
  • F(禁止 - 向用户发送403标头)
  • G(已经 - 不再存在)
  • H =处理程序(设置处理程序)
  • L(最后停止处理规则)
  

上一个规则:指示服务器在处理完前一个指令后停止重写。

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

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

相关问题