Apache 2:Negative FilesMatch / FilesNotMatch

如果我想将规则应用于apache2.conf中的某些文件,我可以使用<FilesMatch>。

例如:

<FilesMatch ".(gif|jpg|jpeg|png|mpg|avi)$"> deny from env=hotlink </FilesMatch> 

但是与FilesMatch相反,即FilesNotMatch?

我想要达到的是:

 <FilesMatch ".(gif|jpg|jpeg|png|mpg|avi)$"> <FilesNotMatch "ban"> deny from env=hotlink </FilesNotMatch> </FilesMatch> 

(否认盗链服务器上的所有图像但横​​幅)

或者你有什么build议我可以修改我的正则expression式不匹配任何包含“禁令”?

可悲的是,似乎没有办法在Apache中否定文件匹配。

但是,Apache使用的正则expression式库是PCRE(Perl Compatible Regular Expressions)。 这意味着您拥有Perl正则expression式的全部function,包括负面的后视和前瞻断言 。 这些是相当复杂和强大的function。 我不能肯定,这将工作,特别是不知道你的图像的完整布局,但你可能能够使用像这样的东西:

 <FilesMatch "(?<!ban).*\.(gif|jpg|jpeg|png|mpg|avi)$"> 

几乎正确 – 您需要使用\b(?!.*ban.*)(.+)\.(gif|jpg|jpeg|png|mpg|avi)$ regexp这样的exception。