Мне нужно настроить обратный прокси-сервер, чтобы в конце URL-адреса был добавлен следующий параметр: &locale=de-de
Это почти работает:
rewrite ^(.*)$ $1&locale=de-de break;
Однако проблема в том, что мне нужно добавить '& locale = de-de' только если его еще нет и если есть '?' в URL ...
Могу ли я получить помощь по формулировке правильного регулярного выражения для этого?
Другой вопрос: почему знак вопроса в моем URL-адресе не отображается, если я использую это:
$ uri? $ args
Или $ uri $ is_args $ args переводит URL-адрес без кодировки, а знак вопроса отображается как% 3f.
Идеи?
РЕДАКТИРОВАТЬ: кажется, что такое поведение существует при использовании в сочетании с proxy_pass. При простой перезаписи это действительно хорошо работает.
rewrite
вы сопоставляете URL-адреса дорожка только часть. Что значит, $1
не будет содержать строку запроса.Итак, писать
rewrite ^(.*)$ $1?locale=de-de break;
Если вы не хотите, чтобы Nginx добавлял исходную строку запроса, просто укажите ?
в конце замены URL:
rewrite ^(.*)$ $1?locale=de-de? break;
Матч для rewrite
не включает параметры запроса, поэтому вам нужно проверить это в другом месте.
Пытаться:
if ($args !~* locale=de\-de){
rewrite ^(.*)$ $1&locale=de-de last;
}
В rewrite
не изменяет параметры запроса, а только часть пути URI. По моему опыту, возня с перезаписью приводит к странным циклам, когда новый параметр добавляется до бесконечности. Перезапись, вероятно, не способ сделать это в Nginx.
Вместо этого вам следует изменить $args
переменная с использованием set
директива:
set $args $args&locale=de-de;