为了账号安全,请及时绑定邮箱和手机立即绑定

RewriteRule Last [L]标志不起作用?

RewriteRule Last [L]标志不起作用?

RewriteRule Last [L]标志不起作用?obj.foo;  // validobj.else  // valid, reserved keywords are valid identifier namesobj.42    // invalid, identifier names cannot start with numbersobj.3foo  // invalid,                ""obj.foo-bar // invalid, `-` is not allowed in identifier namesobj[42]   // valid, 42 will be coerced to "42"obj["--"] // valid, any character sequence is allowedobj[bar]  // valid, will evaluate the variable `bar` and           // use its value as property name
查看完整描述

2 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

[L]规则工作正常-你只是不知道它是如何实际工作的。

当Apache看到[L]标志和规则匹配(重写发生)时,Apache将进入下一次迭代,并将从顶部再次开始匹配所有规则。该[L]标志表示“ 在此迭代中不处理以下任何规则”。

是的,Apache文档并没有100%明确(这意味着它可以改进),但提供了足够的信息来最终弄清楚。


Apache将在几种情况下停止重写周期:

  1. 没有匹配的规则(没有重写);

  2. “立即退出”规则匹配(例如RewriteRule .* - [L]);

  3. 重写发生,但输入URL和最终URL是相同的(当“严重”编写的规则将相同的URL重写到同一URL时,在第2到第3次迭代时发生。

    例如RewriteRule (.*) /index.php?page=$1 [L]

    • /hello => /index.php?page=hello

    • 在下一次迭代中,它将重写/index.php=>/index.php?page=index.php

    • 并且在第3次迭代时它将是/index.php=> /index.php?page=index.php..现在没有意义);

  4. 达到重写迭代限制(默认值= 10) - 如果您输入了无限重写周期(该值由LimitInternalRecursion指令控制)。


根据上述所有信息,我可以说 您当前的规则确实按预期工作。这意味着你必须改变逻辑并摆脱最后一条规则(也许在父.htaccess中处理这一时刻......或者以不同方式处理它 - 所有这些都取决于你的应用程序是如何构建的,我不想做出疯狂的猜测)。


查看完整回答
反对 回复 2019-08-09
?
千万里不及你

TA贡献1784条经验 获得超9个赞

把它摆在你的cath all规则面前。

RewriteCond %{ENV:REDIRECT_STATUS} !=200

问题是,一旦处理了[L]标志,确实忽略了所有下一个RewriteRules,但是,文件从begin开始处理AGAIN,现在使用新url。

catch all如果文件已经重定向,这个神奇的条件将不会处理。

PS:如果它不工作,你可能需要调整条件的位:200!=200^.^$
显然,变量设置200为重定向,但其他页面(错误和填充)将其设置为某个值。现在,这意味着你要么如果它检查is emptyis not emptyis 200或者is not 200,这取决于你所需要的。


查看完整回答
反对 回复 2019-08-09
  • 2 回答
  • 0 关注
  • 654 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信