QSA 意味着如果有一个查询字符串与原始 URL 一起传递,它将被附加到重写(olle?p=1 将被重写为 index.php?url=olle&p=1。
L 表示如果规则匹配,则不再处理低于此规则的任何 RewriteRules。
嗨,有哪些简单的例子可以解释 L 的使用?我似乎无法理解上面的解释。任何帮助将不胜感激。谢谢。
最后一条规则:指示服务器在处理完前面的指令后停止重写。
将标志添加到重写规则的末尾以告诉 Apache 如何解释和处理规则。它们可用于告诉 apache 将该规则视为不区分大小写,如果当前规则匹配则停止处理规则,或各种其他选项。它们以逗号分隔,并包含在方括号中。
该标志表示在重写 URI后QSA
附加现有的查询字符串。例子:
网址=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
该 URLhttp://example.com/foo/bar
从第一条规则原封不动地通过,然后由于标志而停止。L
如果 URL 是,http://example.com/something/else
则第一个规则不匹配并应用第二个规则,将 URI 重写为:/bar.php?z=something/else
请注意,由于重写引擎会循环遍历所有规则,直到 URI 停止更改,所以该L
标志不会阻止循环,只会在当前迭代中应用任何进一步的规则。
[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
您也可以使用其他查询。
喜欢:robert?query=value&query2=value2&query3=value3