如果我想将规则应用于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。