Если я хочу применить правило только к некоторым файлам в 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>
(запретить хотлинкинг всех изображений на сервере, НО баннеры)
Или у вас есть предложение, как я могу изменить свое регулярное выражение, чтобы оно не соответствовало чему-либо, содержащему слово «запрет»?
К сожалению, способа отменить совпадение файлов в Apache не представляется возможным.
Однако библиотека регулярных выражений, которую использует Apache, - это PCRE (Perl Compatible Regular Expressions). Это означает, что у вас есть все возможности регулярных выражений Perl, включая их утверждения отрицательного просмотра назад и вперед. Это довольно сложные и мощные функции. Я не могу быть уверен, что это сработает, особенно не зная полного макета ваших изображений, но вы можете использовать что-то вроде:
<FilesMatch "(?<!ban).*\.(gif|jpg|jpeg|png|mpg|avi)$">
Почти правильно - нужно использовать \b(?!.*ban.*)(.+)\.(gif|jpg|jpeg|png|mpg|avi)$
regexp для такого исключения.