Nginx - preencher REQUEST_URI com URL reescrito

1

Eu tenho uma configuração Nginx que é para um novo aplicativo PHP que possui a mesma funcionalidade que outro aplicativo legado do PHP, mas URLs diferentes.

Eu quero preservar os caminhos do aplicativo antigo, substituindo o prefixo do caminho /foo por /page e substituindo o caminho especial /foo/bar por /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;
    }

Essa abordagem não funciona, porque $request_uri , que é passado para REQUEST_URI no arquivo fastcgi_params include, ainda contém /foo/bar .

Eu tentei definir REQUEST_URI para $fastcgi_path_info , mas isso falha para todos os URLs não reescritos, pois está vazio. $uri também não funciona porque contém apenas /index.php?

Existe alguma variável para a terceira configuração de localização que contém o caminho reescrito?

    
por chiborg 28.09.2016 / 16:20

1 resposta

4

$request_uri tem o valor do URI original e $uri tem o valor do URI final. Você pode usar a diretiva set para salvar um instantâneo de $uri de dentro do bloco location / e usá-lo posteriormente para gerar o parâmetro REQUEST_URI .

Assim:

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;
    ...
}

Veja este documento para saber mais.

    
por 28.09.2016 / 17:52