什么是 L 在[ QSA,L ]在 htaccess 中

QSA 意味着如果有一个查询字符串与原始 URL 一起传递, 它将被附加到重写(olle? p = 1将被重写为 Url = olle & p = 1.

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

嗨,有什么简单的例子来解释 L 的用法? 我似乎无法理解以上的解释,如能提供任何帮助,我将不胜感激。 谢谢。

102250 次浏览

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

URL http://example.com/foo/bar从第一条规则中原封不动地通过,然后由于 L标志而通过 停止。如果 URL 是 http://example.com/something/else,那么第一个规则不匹配,第二个规则被应用,将 URI 重写为: /bar.php?z=something/else

注意,由于重写引擎循环遍历所有规则,直到 URI 停止更改,因此 L标志将 没有阻止循环,只有任何进一步的规则在当前迭代中被应用。

. htaccess 标志列表

  • C (用下一条规则链接)
  • CO = cookie (设置指定的 cookie)
  • E = var: value (将环境变量 var 设置为 value)
  • F (被禁止——向用户发送一个403消息头)
  • G (消失-不再存在)
  • H = 处理程序(设置处理程序)
  • 最后一站处理规则

最后一条规则: 指示服务器在处理前面的指令之后停止重写。

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

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

[ L,QSA ]的例子

之前: Https://example.com/index.php?user=robert

RewriteEngine On
RewriteRule ^user/([^/]+)?$ index.php?user=$1 [L,QSA]

之后: Https://example.com/user/robert?query=value

您也可以使用其他查询。

比如: Query = value & query2 = value2 & query3 = value3