
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.com
el archivo php se muestra correctamente. Sin embargo, ahora estoy intentando reescribir una ruta específica /update/whatever
a /update.php?var=whatever
. Para hacer esto, agregué el siguiente location
bloque 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/whatever
descarga el archivo php en lugar de entregar la salida analizada desde PHP.
También intenté agregar las fastcgi
directivas 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.php
al 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($|/) {