В конфиге 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;
}

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

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

2 ответа

Решение

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

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/?))$ {
Другие вопросы по тегам