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

перенаправление nginx на основе $ request_uri

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

 server {
    listen       80;
    server_name  www.example.com example.com;
    return       301 https://example.com$request_uri;
 }

Я хочу добавить поддомен, но перенаправить его на сайт с параметром. например fr.example.com -> https://example.com?lang=fr

Если я сделаю:

return       301 https://example.com$request_uri&lang=fr;

Он добавит '& lang = fr', есть ли другие параметры в $ request_uri или не.

Как я могу условно определить "?" или '&' в зависимости от содержимого $ request_uri?

Я пробовал следующее:

server {
    listen       80;
    server_name  fr.example.com;
       if ($request_uri ~ ""){
           return       301 https://example.com?tlang=fr;
       }
        return       301 https://example.com$request_uri&tlang=fr;
}

но таким образом сайт провалился в целом.

Спасибо

Прежде всего, $request_uri не содержит аргументов запроса для запроса.

Есть два варианта:

  1. Используйте возврат, где вы добавляете $args после lang аргумент:

return 301 https://example.com?lang=fr&$args:

  1. Используйте карту:

В http уровень, вы определяете карту:

map $args $redirargs {
    "~.+" $args&lang=fr;
    default lang=fr;
}

А затем используйте

return 301 http://example.com$request_uri?$redirargs;