RewriteMap 未按预期工作

RewriteMap 未按预期工作

我试图阻止对某些网址的访问:

https://example.com/questions/topic

我有一个 blacklist.txt 文件,其中包含以下内容:

questions/topic deny

然后我的配置如下:

 RewriteMap access txt:path_to_blacklist.txt
 RewriteCond ${access:%{REQUEST_URI}} deny [NC]
 RewriteRule .* - [F,L]

但我发现我仍然可以打开https://example.com/questions/topic通常情况下,但是当我尝试使用以下配置而不是 RewriteMap 时:

RewriteCond %{REQUEST_URI} questions/topic  [NC]
RewriteRule .* - [F,L]

它工作成功,但我无法访问该网址。那么如何使用 RewriteMap 达到相同的结果?

答案1

这是一个“在背后咬自己”的疏忽:${REQUEST_URI}包括租赁削减。如果你有

/questions/topic deny

在你的文件中,你应该没问题。 (RewriteMap 确实精确匹配用于键查找;当您questions/topic显式地将您放入 RewriteCond 中时,它是一个正则表达式匹配,并且由于它没有用^and/or锚定$,因此在您的情况下可以归结为子字符串匹配。)

作为个人品味的问题:由于您RewriteRule没有对匹配进行任何操作,因此您可以编写“匹配任何内容”RewriteRule ^而不是RewriteRule .*“匹配任何内容”。前者可能更快,因为它不需要查看字符串,where.*是贪婪的并且会读取所有字符串。

相关内容