Подтвердить что ты не робот

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

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

Я пробовал:

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

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

4b9b3361

Ответ 1

Согласно документации nginx

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

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

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

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

Ответ 3

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

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

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