Reescribir una ruta específica en xginx

Reescribir una ruta específica en xginx

Estoy intentando reescribir una ruta específica usando nginx. Configuré mi servidor usando nginx/php-fpm/php y está funcionando bien.

Tengo la siguiente configuración de 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;
    }
}

Y esto funciona. Es decir, cuando lo accedo, http://domain.comel archivo php se muestra correctamente. Sin embargo, ahora estoy intentando reescribir una ruta específica /update/whatevera /update.php?var=whatever. Para hacer esto, agregué el siguiente locationbloque a mi configuración (antes del location ~ ^/index.php($|/) {bloque):

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

Pero cuando intento acceder a la URL, http://domain.com/update/whateverdescarga el archivo php en lugar de entregar la salida analizada desde PHP.

También intenté agregar las fastcgidirectivas a ese bloque de ubicación con el mismo resultado. ¿Alguien puede decirme qué he estropeado en mi configuración?

Respuesta1

Esta línea:

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

le dice a nginx que pase solo index.phpal intérprete de php y necesita que también se aplique a otros archivos php, por lo que aquí se requiere una regla más genérica:

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

información relacionada