Apache 2:负面 FilesMatch / FilesNotMatch

Apache 2:负面 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>

(拒绝服务器上除横幅之外的所有图像的热链接)

或者您是否有什么建议,让我可以修改正则表达式以不匹配任何包含“ban”的内容?

答案1

遗憾的是,Apache 中似乎没有办法否定文件匹配。

但是,Apache 使用的正则表达式库是 PCRE(Perl 兼容正则表达式)。这意味着您可以充分利用 Perl 正则表达式的功能,包括其负面后视断言和前视断言。这些是相当复杂和强大的功能。我不能确定这是否会起作用,特别是在不知道图像的完整布局的情况下,但您可能能够使用类似以下内容:

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

答案2

几乎正确 - 您需要\b(?!.*ban.*)(.+)\.(gif|jpg|jpeg|png|mpg|avi)$对此类异常使用正则表达式。

相关内容