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

В конфигурации Nginx, как ограничить соответствие регулярным выражениям?

В конфигурационном файле nginx для моего сервера я написал следующий блок местоположения:

location ~ /page/(?!(3/?|5/?|6/?|8/?)) {
    return 301 https://anothersite.com/page$is_args$args;
}

При этом я пытаюсь перенаправить все / page /, ЗА ИСКЛЮЧЕНИЕМ следующего:

/page/3
/page/3/
/page/5
/page/5/
/page/6
/page/6/
/page/8
/page/8/

Что хорошо работает для этих страниц. Однако это также исключает любые страницы, НАЧИНАЮЩИЕСЯ с шаблона. Итак, такие страницы, как следующие

/page/33
/page/814
/page/577

не перенаправляются, но должны быть. Как мне изменить это регулярное выражение, чтобы я мог ограничить соответствие только первым символом после / page / (с косой чертой в конце или без)?

Я тоже пробовал это:

location ~ "/page/(?!([3]{1}/?|[5]{1}/?|[6]{1}/?|[8]{1}/?))" {
    return 301 https://anothersite.com/page$is_args$args;
}

Однако похоже, что это ведет себя точно так же, как первый образец.

Любая помощь высоко ценится! Заранее спасибо!

К сожалению, я не смог понять это. В итоге я сделал это:

location /page/ { return 301 https://anothersite.com/page$is_args$args; } location ~ ^/page/3/?$ {} location ~ ^/page/5/?$ {} location ~ ^/page/6/?$ {} location ~ ^/page/8/?$ {}

Это делает свою работу, хотя это не однострочник, как я надеялся.

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

Например:

location ~ /page/(?!(3/?|5/?|6/?|8/?))$ {