В конфиге 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/?))$ {