Apache 2:负 FilesMatch / FilesNotMatch

Bla*_*laM 8 regular-expressions apache-2.2

如果我只想对 apache2.conf 中的某些文件应用规则,我可以使用 <FilesMatch>。

例如:

<FilesMatch ".(gif|jpg|jpeg|png|mpg|avi)$">
    deny from env=hotlink
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

但是有没有与 FilesMatch 相对的,即 FilesNotMatch?

我想要实现的是:

<FilesMatch ".(gif|jpg|jpeg|png|mpg|avi)$">
    <FilesNotMatch "ban">
        deny from env=hotlink
    </FilesNotMatch>
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

(拒绝盗链服务器上的所有图像但横​​幅)

或者你有什么建议我如何修改我的正则表达式以不匹配包含“ban”的任何内容?

Dav*_*ley 8

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

但是,Apache 使用的正则表达式库是 PCRE(Perl Compatible Regular Expressions)。这意味着您拥有 Perl 正则表达式的全部功能,包括它们的否定回顾和超前断言。这些都是相当复杂和强大的功能。我不能确定这会起作用,尤其是在不知道图像的完整布局的情况下,但您可能可以使用以下内容:

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