У меня есть директива nginx location
, целью которой является «удалить» префикс локализации из URI для директивы proxy_pass
.Nginx - кодировка (нормализующая) часть URI
Например, чтобы сделать URI http://example.com/en/lalala использование proxy_pass http://example.com/lalala
location ~ '^/(?<locale>[\w]{2})(/(?<rest>.*))?$' {
...
proxy_pass http://example/$rest;
...
}
Таким образом, переменная rest
будет декодироваться, когда передается proxy_pass directeve. Кажется, ожидается behavior.
Проблема заключается в том, когда мой URI содержит закодированное пространство %20
передается от клиента
http://example.com/lala%20lala
Nginx декодирует URI для
http://example.com/lala lala
Я могу видеть это в моем error.log.
Вопрос в том, можно ли использовать кодировку rest
переменную как-то, поскольку она передается от клиента? Если я делаю что-то совершенно неправильное, пожалуйста, предложите правильный путь.
спасибо.
большое спасибо. Я знал о $ request_uri, но мои текущие знания nginx не позволяли мне правильно изменять URI. –
Имейте в виду, что если вы используете $ request_uri, тогда IT НЕ ИЗМЕНИТЬ, если сделано внутреннее перенаправление, например, когда выполняется переписывание, или применяя директиву error_page. В этих случаях изменяется только $ uri, но $ uri уже декодируется, поэтому его нельзя использовать в качестве общей замены для $ request_uri. –