Местоположение Nginx "не равно" регулярному выражению
Как установить условие location
в Nginx, которое отвечает на все, что не соответствует перечисленным местоположениям?
Я пробовал:
location !~/(dir1|file2\.php) {
rewrite ^/(.*) http://example.com/$1 permanent;
}
Но это не вызывает перенаправление. Он просто обрабатывает запрошенный URI, используя правила в остальной конфигурации сервера.
Ответы
Ответ 1
Согласно документации nginx
нет синтаксиса для NOT, соответствующего регулярному выражению. Вместо этого сопоставьте целевое регулярное выражение и назначьте пустой блок, затем используйте location/, чтобы сопоставить что-либо еще
Итак, вы можете определить что-то вроде
location ~ (dir1|file2\.php) {
# empty
}
location / {
rewrite ^/(.*) http://example.com/$1 permanent;
}
Ответ 2
Я искал то же самое. и нашел это решение.
Использовать отрицательное регулярное выражение:
location ~ ^/(?!(favicon\.ico|resources|robots\.txt)) {
.... # your stuff
}
Источник
Отрицательные регулярные выражения в местоположении
Ответ 3
Предположим, что у вас есть два местоположения: location1
и location2
, вы можете попробовать выполнить конфигурацию блока местоположений, чтобы решить вашу проблему.
location ~ ^/(location1|location2) {
rewrite (.*) http://example.com/$1 permanent;
}
Кроме того, проблема, с которой вы сталкиваетесь, может быть вызвана последовательностью нескольких блоков местоположения в вашей конфигурации. Проверьте, в случае, если какой-либо блок местоположения, который предшествует этому, выполняет запрос.