В конфигурационном файле 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/?))$ {