如何阻止RewriteRule进入无限循环?

时间:2010-11-27 15:37:53

标签: .htaccess mod-rewrite

假设我的服务器上有一个名为FILE%20NAME[1].png的文件。

浏览器请求FILE%20NAME%5B1%5D.png,转义方括号,Apache解释为FILE NAME[1].png,当然找不到。

我知道我应该重命名该文件,但是如何在.htaccess中编写快速修复的重定向规则? 我试过了

RewriteRule ^folder/FILE\sNAME\[1\].png /folder/FILE\%20NAME\[1\].png [R=301,QSA,L,NE]

导致无限循环,因为重写的文件名仍然符合规则。

3 个答案:

答案 0 :(得分:2)

RewriteRule ^folder/FILE\sNAME\[1\].png /folder/FILE\%2520NAME\[1\].png [R=301,QSA,L,NE]

答案 1 :(得分:1)

您需要转义%(百分号)符号 - 因为否则%20会被解释为(空格)。

%转到%25,将%20替换为%2520应该可以解决问题。

另请参阅:Percent-encoding

答案 2 :(得分:1)

  1. 你误解了问题 - 问题不在于括号被转义。在文件系统上发送以获取名为“FILE%20NAME [1] .png”的文件的正确请求将是URL中的“FILE%2520NAME%5B1%5D.png”。

  2. 如果您刚刚使用了Alias或非重定向RewriteRule,则循环就没有问题。

  3. 我很确定如果你照顾我在问题1中所说的内容,那么循环也不会有问题,因为当你发回适当的重定向目标时,那么新的请求网址将包含%2520(已解码:%20),\s无法匹配,因此该规则不适用。