Расположение Nginx "не равно" регулярному выражению

Как установить location условие в Nginx, которое отвечает на все, что не равно перечисленным местоположениям?

пробовал:

location !~/(dir1|file2.php) {
   rewrite ^/(.*) http://example.com/ permanent;
}

но это не сработает редирект. Он просто обрабатывает запрошенный URI, используя правила в остальной части конфигурации сервера.

3 ответов


по данным nginx и документация

нет синтаксиса для несоответствия регулярному выражению. Вместо этого сопоставьте целевое регулярное выражение и назначьте пустой блок, а затем используйте location /, чтобы соответствовать чему-либо еще

таким образом, вы можете определить что-то вроде

location ~ (dir1|file2\.php) { 
    # empty
}

location / {
    rewrite ^/(.*) http://example.com/ permanent; 
}

Я искал то же самое. и нашел это решение.

используйте отрицательное утверждение regex:

location ~ ^/(?!(favicon\.ico|resources|robots\.txt)) { 
.... # your stuff 
} 

источник отрицаемые регулярные выражения в местоположении


Предположим, у вас есть два места говорят:location1 и location2, вы можете попробовать следующую конфигурацию блока местоположения, чтобы решить вашу проблему.

 location ~ ^/(location1|location2) {
      rewrite (.*) http://example.com/ permanent; 
 }

и комментарии может быть из-за последовательности нескольких блоков местоположения в вашей конфигурации. Пожалуйста, проверьте, если какой-либо из блоков местоположения, который приходит до этого, обслуживает запрос.