当 MOD_Rewrite 执行 RewriteRule 时,是否会为新生成的请求再次执行所有 MOD_Rewrite 规则?具体在以下示例中,这会导致循环吗?
RewriteCond Host: (?:www\.)?mysite\.com
RewriteRule ^(.*)$ $1 [QSA,L]
当 MOD_Rewrite 执行 RewriteRule 时,是否会为新生成的请求再次执行所有 MOD_Rewrite 规则?具体在以下示例中,这会导致循环吗?
RewriteCond Host: (?:www\.)?mysite\.com
RewriteRule ^(.*)$ $1 [QSA,L]
在您的情况下,它无论如何都不会循环。您打开了“L”开关,将该特定规则固定为最后一个。
此外,您必须使用“N”或“NS”开关显式地强制下一次迭代,否则它只会在您的规则文件中移动并在最后一个匹配的规则处停止。从文档:
N(下一次迭代)
强制重写引擎修改规则的目标并从头开始重新启动规则检查(保存所有修改)。重新启动的次数受 RepeatLimit 指令中指定的值的限制。如果超过这个数字,N 标志将被简单地忽略。
NS(相同规则的下一次迭代)
像 N 标志一样工作,但从同一规则重新开始规则处理(即强制重复规则应用)。单个规则迭代的最大次数由 RepeatLimit 指令给出。但是单个规则的重复次数不计入全局重复次数(即N标志引起的重复次数限制与NS引起的重复次数无关)。