Назад | Перейти на главную страницу

Директива местоположения Apache - отрицательные комбинации PCRE (соответствуют всем, кроме ..)

Да, я все еще использую apache2.2 в системе, и я пытаюсь использовать PCRE с директивой apache Location, ищущей любой URL-адрес, не содержащий изображений или чего-либо подобного. Вот некоторые вещи, которые я пробовал, и, похоже, это не дает отрицательного условного соответствия.

<Location "^/(?!(?:jpe?g|png|bmp|gif|css|js|svg))(.*)">

или

<Location ~ "^.*\.(?!jpg$|png$|bmp$|gif$|css$|js$|svg$)[^.]+$">

Возможно ли такое вообще, или apache ограничен этим?

Если мое описание не слишком ясное, вот несколько примеров ...;)

я бы хотел сопоставить что-нибудь подобное:

http://some.site.org/something/
https://some.site.org/else/
http://some.site.org
https://some.site.org/else/and/so/on
http://some.site.org/even/something/even/crazy_url/../../././?/

Но не соответствует что-нибудь вроде:

http://some.site.org/content/monkey.jpg
http://some.site.org/other/chimp.gif
https://some.site.org/phobia/snake.png
http://some.site.org/junk/style.min.css?v=6.1
https://some.site.org/stuff/juju.js?ver=0.4.1

Документы Apache говорят 2.2 использует PCRE.

Из этот вопрос о stackoverflow прогнозирующее регулярное выражение должно выглядеть примерно так (обратите внимание на дополнительные отступы в .\.js чтобы было 4 символа)

<Location ~ "^.*(?!\.jpg|\.png|\.bmp|\.gif|\.css|.\.js|\.svg)....$">

Это вызовет .* чтобы впитать все, кроме последних 4 символов, затем проверить, не совпадают ли следующие четыре символа ни с одним из расширений, а затем завершить строку.

Проблема заключается в том, что файл или путь короче 4 символов (/me) это тоже не совпадет. Вместо этого вы можете попробовать отрицательное ретроспективное сопоставление:

<Location ~ "^.*$(?<!\.jpg|\.png|\.bmp|\.gif|\.css|\.js|\.svg)">

Это должно впитать всю струну в .* (Был спор о том, $ должен идти до или после ретроспективного просмотра), затем выполните резервное копирование и посмотрите, закончился ли он одним из расширений и не соответствует ли это.