我想知道你是否可以为我澄清一个简单的观点。对不起,如果它有点基本或之前被问过。好的说我有类似下面的重写规则:
RewriteRule ^directory/file http://www.mysite.com/newdirectory/file [R=301,NC,L]
RewriteRule ^directory/file2 http://www.mysite.com/newdirectory/file2 [R=301,NC,L]
RewriteRule ^directory/file3 http://www.mysite.com/newdirectory/file3 [R=301,NC,L]
由于这些更改是永久性的,我使用的是R = 301标志。现在我假设我在为这些中添加[L]标志是正确的,因为它们是独立/单独的重写并且彼此不相关?现在,如果我在下面有一个处理hotlinking或其他一些重写的部分,我假设它们仍然会工作?我想我想说的是使用[L]它不会停止所有处理或重写规则吗?
再次抱歉,如果这是一个愚蠢的问题,我只需要有人为我澄清,因为我已经阅读了一些关于此的文章,但在我看来,他们还没有100%明确。
感谢。
答案 0 :(得分:0)
绝对不是一个愚蠢的问题,许多网站开发人员对标记L
有误解。
此标志仅停止当前重写循环(就像for循环中的continue一样)并强制重写引擎再次处理重写规则。它没有,也无法阻止下面或上面的规则被处理。
答案 1 :(得分:0)
是和否。它确实意味着停止处理规则,但它并没有停止其他规则。
apache文档说:
[L]标志使mod_rewrite停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理其他规则。这对应于Perl中的最后一个命令,或C中的break命令。使用此标志指示应立即应用当前规则而不考虑进一步的规则。
但是,它没有说的是: (来自mediacollege)
L标志将告诉Apache停止处理重写规则 那个要求。现在经常未实现的是它现在变成了新的 请求新的重写文件名并开始处理 再次重写规则。
因此,如果您要在目的地静止的情况下进行重写 与模式匹配,它将不会按预期运行。在这些情况下, 你应该使用RewriteCond从规则中排除某个文件。