澄清在htaccess重写中使用[L]?

时间:2014-04-15 19:48:56

标签: .htaccess rewrite

我想知道你是否可以为我澄清一个简单的观点。对不起,如果它有点基本或之前被问过。好的说我有类似下面的重写规则:

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%明确。

感谢。

2 个答案:

答案 0 :(得分:0)

绝对不是一个愚蠢的问题,许多网站开发人员对标记L有误解。

此标志仅停止当前重写循环(就像for循环中的continue一样)并强制重写引擎再次处理重写规则。它没有,也无法阻止下面或上面的规则被处理。

答案 1 :(得分:0)

是和否。它确实意味着停止处理规则,但它并没有停止其他规则。

apache文档说:

  

[L]标志使mod_rewrite停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理其他规则。这对应于Perl中的最后一个命令,或C中的break命令。使用此标志指示应立即应用当前规则而不考虑进一步的规则。

但是,它没有说的是: (来自mediacollege

  

L标志将告诉Apache停止处理重写规则   那个要求。现在经常未实现的是它现在变成了新的   请求新的重写文件名并开始处理   再次重写规则。

     

因此,如果您要在目的地静止的情况下进行重写   与模式匹配,它将不会按预期运行。在这些情况下,   你应该使用RewriteCond从规则中排除某个文件。