Reescreva um caminho específico no xginx

0

Estou tentando reescrever um caminho específico usando nginx. Eu configurei meu servidor usando nginx / php-fpm / php e está funcionando bem.

Eu tenho a seguinte configuração do servidor:

server {
    listen 80;

    server_name domain.com;
    root /srv/www/domain.com/public;

    location ~ ^/index.php($|/) {
        fastcgi_split_path_info ^(.+.php)(.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass   127.0.0.1:9000;
        include        fastcgi_params;
    }

    location / {
       index index.php;
            try_files $uri /index.php?$args;
    }
}

E isso funciona. Ou seja quando eu vou para http://domain.com ele renderiza o arquivo php muito bem. No entanto, estou tentando reescrever um caminho específico /update/whatever to /update.php?var=whatever . Para fazer isso, adicionei o seguinte location block na minha configuração (antes do bloco location ~ ^/index.php($|/) { ):

location ~* ^\/update/(\w+)$ {
    rewrite ^/update/(\w+)$ /update.php?browser=$1 last;
}

Mas quando tento acessar a URL http://domain.com/update/whatever , ele faz o download do arquivo php em vez de veicular a saída analisada do PHP.

Eu também tentei adicionar as diretivas fastcgi a esse bloco de localização com o mesmo resultado. Alguém pode me dizer o que eu errei na minha configuração?

    
por PeeHaa 13.01.2013 / 00:37

1 resposta

1

Esta linha:

location ~ ^/index.php($|/) {

diz ao nginx para passar apenas index.php para o interpretador php e você precisa que ele também se aplique a outros arquivos php, então é necessária mais regra genérica aqui:

location ~ ^/(.*).php($|/) {
    
por 13.01.2013 / 01:04