QSA 意味着如果有一个查询字符串与原始 URL 一起传递, 它将被附加到重写(olle? p = 1将被重写为 Url = olle & p = 1. L 表示如果规则匹配,则不再处理下面的任何重写规则 这个。
QSA 意味着如果有一个查询字符串与原始 URL 一起传递, 它将被附加到重写(olle? p = 1将被重写为 Url = olle & p = 1.
L 表示如果规则匹配,则不再处理下面的任何重写规则 这个。
嗨,有什么简单的例子来解释 L 的用法? 我似乎无法理解以上的解释,如能提供任何帮助,我将不胜感激。 谢谢。
QSA标志意味着附加一个现有的查询字符串 之后,URI 已经被重写。示例:
QSA
URL = http://example.com/foo/bar?q=blah
http://example.com/foo/bar?q=blah
规则:
RewriteRule ^foo/(.*)$ /index.php?b=$1
结果 = /index.php?b=bar
/index.php?b=bar
注意 q=blah是如何消失的。因为现有的查询字符串被删除,以有利于规则目标中的查询字符串(b = $1)。现在,如果你包含一个 QSA标志:
q=blah
RewriteRule ^foo/(.*)$ /index.php?b=$1 [QSA]
结果变成 = /index.php?b=bar&q=blah
/index.php?b=bar&q=blah
L标志只是意味着停止应用后面的任何规则。给定相同的 URL,http://example.com/foo/bar?q=blah,并给定规则:
L
RewriteRule ^foo - RewriteCond %{REQUEST_URI} !^/bar.php RewriteRule ^(.*)$ /bar.php?z=$1
第一个规则被应用,URI 被不加修改地传递(通过 -目标)。然后,重写引擎处理下一个规则,URI 被重写为 /bar.php?z=foo/bar。当你在结尾添加一个 L时会发生什么:
-
/bar.php?z=foo/bar
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
http://example.com/foo/bar
http://example.com/something/else
/bar.php?z=something/else
注意,由于重写引擎循环遍历所有规则,直到 URI 停止更改,因此 L标志将 没有阻止循环,只有任何进一步的规则在当前迭代中被应用。
最后一条规则: 指示服务器在处理前面的指令之后停止重写。
标志被添加到重写规则的末尾,以告诉 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