如果我只想对 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>
(拒绝服务器上所有图像的热链接但横幅)
或者你有什么建议我可以修改我的正则表达式以不匹配任何包含“ban”的东西?
可悲的是,似乎没有办法在 Apache 中否定文件匹配。
但是,Apache 使用的正则表达式库是 PCRE(Perl Compatible Regular Expressions)。这意味着您拥有 Perl 正则表达式的全部功能,包括它们的负向后视断言和前向断言。这些是相当复杂和强大的功能。我不能确定这会奏效,尤其是在不知道图像的完整布局的情况下,但您也许可以使用类似的东西:
几乎正确 - 您需要
\b(?!.*ban.*)(.+)\.(gif|jpg|jpeg|png|mpg|avi)$
对此类异常使用正则表达式。