htaccess中[QSA,L]的L是多少?

sta*_*wer 53 .htaccess qsa

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

L表示如果规则匹配,则不再处理此规则以下的RewriteRules.

嗨,有什么简单的例子来解释L的使用?我似乎无法理解上面这个解释.任何帮助将受到高度赞赏.谢谢.

Jon*_*Lin 73

QSA标志表示在重写URI 之后附加现有查询字符串.例:

URL =http://example.com/foo/bar?q=blah

规则:

RewriteRule ^foo/(.*)$ /index.php?b=$1
Run Code Online (Sandbox Code Playgroud)

结果=/index.php?b=bar

注意它q=blah是如何消失的.因为现有的查询字符串被删除而有利于规则目标中的那个(b = $ 1).现在,如果你包含一个QSA标志:

RewriteRule ^foo/(.*)$ /index.php?b=$1 [QSA]
Run Code Online (Sandbox Code Playgroud)

结果变为=/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 
Run Code Online (Sandbox Code Playgroud)

应用第一个规则并且URI通过不变(通过-目标)传递.然后重写引擎处理下一个规则,并将URI重写为/bar.php?z=foo/bar.添加L到最后会发生什么:

RewriteRule ^foo - [L]

RewriteCond %{REQUEST_URI} !^/bar.php
RewriteRule ^(.*)$ /bar.php?z=$1 
Run Code Online (Sandbox Code Playgroud)

URL http://example.com/foo/bar从第一个规则不受影响地传递,然后因标志而停止L.如果URL是http://example.com/something/else第一个规则不匹配并且第二个规则被应用,则将URI重写为:/bar.php?z=something/else

请注意,由于重写引擎遍历所有规则直到URI停止更改,因此该L标志不会阻止循环,只会在当前迭代中应用任何其他规则.


Smi*_*iya 61

.htaccess标志清单

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

上一个规则:指示服务器在处理前一个指令后停止重写.

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

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

  • 你得到了我的+1,但是对于一个完美的答案,最好提供一个 Apache 官方资源的链接,例如 https://httpd.apache.org/docs/current/mod/mod_rewrite.html#RewriteRule (或任何地方)你的参考是) (2认同)