如果我只想将规则应用于 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”的内容?
答案1
遗憾的是,Apache 中似乎没有办法否定文件匹配。
但是,Apache 使用的正则表达式库是 PCRE(Perl 兼容正则表达式)。这意味着您可以充分利用 Perl 正则表达式的功能,包括其负面后视断言和前视断言。这些是相当复杂和强大的功能。我不能确定这是否会起作用,特别是在不知道图像的完整布局的情况下,但您可能能够使用类似以下内容:
<FilesMatch "(?<!ban).*\.(gif|jpg|jpeg|png|mpg|avi)$">
答案2
几乎正确 - 您需要\b(?!.*ban.*)(.+)\.(gif|jpg|jpeg|png|mpg|avi)$
对此类异常使用正则表达式。