Как передать в nginx урл с символами &? из php используя X-Accel-Redirect?

Nginx используется для проксирования удаленного сервера.
Код php:
$url = '/internal_redirect/?url=' .
            'domain.com?test=123&test2=234' .
            '&protocol=https';

        header("X-Accel-Redirect: " . $url);


Проблема в
domain.com?test=123&test2=234
. Если оставить как в примере, то будут просто передаваться дополнительные переменные типа arg_test2 и т. д. Если использовать urlencode, то nginx автоматом не декодирует. Как справиться с символами ? и & Желательно без установки дополнительных модулей. Это реально?

Частичный код nginx
location ~* ^/internal_redirect/ {
	internal;

	set $download_url $arg_protocol://$arg_url;

	proxy_pass $download_url;
}
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
@dodo512
Сначала просто добавляем префикс /internal_redirect/
$url = '/internal_redirect/http://domain.com/?test=123&test2=234';

header("X-Accel-Redirect: " . $url);


Потом убираем этот префикс и добавляем всё что есть в $args.
location ~ ^/internal_redirect/(?<url>.+) {
    internal;
    
    proxy_pass $url$is_args$args;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ky0
@ky0 Куратор тега Nginx
Миллиардер, филантроп, патологический лгун
Всё, что после знака вопроса - не часть урла, а параметры. Можно, например, передавать их нгинксу в отдельных заголовках, а внутри него прицеплять к урлу. Никаких экзотических модулей это не потребует.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы