QSA表示如果使用原始URL传递了查询字符串, 它将附加到重写(olle?p = 1将被重写为 ?的index.php URL =奥莱&安培; P = 1
L表示如果规则匹配,则不再处理下面的RewriteRules 这个。
嗨,有什么简单的例子来解释L的使用? 我似乎无法理解上面这个解释。任何帮助将受到高度赞赏。 谢谢。
答案 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)
上一个规则:指示服务器在处理完前一个指令后停止重写。
标志被添加到重写规则的末尾,以告诉Apache如何解释和处理规则。它们可用于告诉apache将规则视为不区分大小写,如果当前匹配则停止处理规则,或者使用各种其他选项。它们以逗号分隔,并包含在方括号中。