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 标志将不会阻止循环,只有在当前迭代中应用任何进一步的规则。