Как исключить определенную часть URL при использовании редиректа?

Как изменить текущий редирект, чтобы отсечь первую часть локейшна и получить желаемый результат? 

Исходный редирект:
https://domain.ru/url1/url2/url3/?code=XXX&state=YYY  ==>  https://domain2.ru/url2/url3?code=XXX&state=YYY

Текущая настройка:
if ( $request_uri ~ 'url1/url2/url3/(.*)$' ) {
                return 301 https://domain2.ru$request_uri;
При использовании данной настройки в редирект попадает первая часть локейшна. Как отсечь ее в return'е?
  • 7 декабря 2023 г. 10:49
Ответы на вопрос 2
Чтобы исключить определенную часть URL при использовании редиректа, вам нужно воспользоваться переменной $uri вместо $request_uri в return'е. Вот как будет выглядеть измененный редирект:

if ( $request_uri ~ 'url1/url2/url3/(.*)$' ) {
    return 301 https://domain2.ru$uri$is_args$args;
}

Теперь первая часть локейшна будет отсутствовать в редиректе, и вы получите желаемый результат.
rewrite ^/url1/(url2/url3/)  https://domain2.ru/$1 permanent;Или такif ($request_uri ~ '^/url1/(url2/url3/.*)') {
    return 301 https://domain2.ru/$1;
}
Похожие вопросы