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式不匹配任何包含“禁令”?

  • 使用sed删除围绕string的开合方括号
  • 如何在HAproxy的ACL列表中匹配通配符主机?
  • Bash脚本创build大量的目录系列
  • 我如何将一些电子邮件路由到Postfix中的脚本?
  • Nginx:位置正则expression式,适用于多个具有后端的path
  • 在rsyncpath中的某处列出子文件夹
  • 2 Solutions collect form web for “Apache 2:Negative FilesMatch / FilesNotMatch”

    可悲的是,似乎没有办法在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。

    服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器.