Nginx - заполнить REQUEST_URI переписанным URL

У меня есть конфигурация Nginx для нового PHP-приложения, которое имеет те же функции, что и другое устаревшее PHP-приложение, но с другими URL-адресами.

Я хочу сохранить пути старого приложения, заменив префикс пути / foo на / page и заменив специальный путь / foo / bar with / page / otherBar :

    # legacy support
    location ~ ^/foo/bar {
        rewrite /foo/bar /page/otherBar$1 last;
    }

    # How to rewrite all other pages starting with "/foo" ?

    # END legacy support

    location / {
        # try to serve file directly, fallback to front controller
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/index\.php(/|$) {
        proxy_read_timeout 300;
        include        fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param  SCRIPT_FILENAME /usr/share/nginx/www/$fastcgi_script_name;
        fastcgi_param  PATH_INFO       $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED $document_root$fastcgi_script_name;
        fastcgi_pass   unix:/var/run/php/php7.0-fpm.sock;
    }

Этот подход не работает, потому что $ request_uri , который передается на REQUEST_URI в fastcgi_params ] включить файл, все еще содержит / foo / bar .

Я попытался установить REQUEST_URI на $ fastcgi_path_info , но это не удалось для всех неперезаписанных URL-адресов, поскольку тогда он был пуст. $ uri также не работает, потому что он просто содержит /index.php?

Есть ли какая-либо переменная для конфигурации третьего местоположения, которая содержит перезаписанный путь?

2
задан 28 September 2016 в 17:20
1 ответ

$request_uri имеет значение исходного URI и $uri имеет значение конечного URI. С помощью директивы set можно сохранить снимок $uri изнутри блока location / и использовать его позже для генерации параметра REQUEST_URI.

Вот так:

location / {
    set $save_uri $uri;
    try_files $uri /index.php$is_args$args;
}

location ~ ^/index\.php(/|$) {
    include  fastcgi_params;
    fastcgi_param  REQUEST_URI $save_uri;
    ...
}

Смотрите данный документ подробнее.

.
4
ответ дан 3 December 2019 в 09:59

Теги

Похожие вопросы