Reescribiendo los archivos de prueba de nginx

8

Estoy tratando de convertir una reescritura muy simple de una versión anterior de nginx a la actual como se muestra a continuación:

location / {
   if ( !-f $request_filename ) {
     rewrite ^/([a-z]*)$ /index.php?action=$1;
     rewrite ^/([a-z]*)/(.*)$ /index.php?action=$1&item=$2;
   }
}

Así de lejos he llegado. Aparece la página de índice, pero cualquier página que deba reescribirse como la anterior, en su lugar arroja 404:

server {

    listen 80 default;
    root /var/www;
    index index.php;
    server_name _;

    location / {
        try_files $uri $uri/ /index.php?action=$uri&item=$args;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

¿Qué estoy haciendo mal aquí?

Industrial
fuente
¿Qué está pasando exactamente? Parte del problema es $ uri y $ args no están codificados correctamente.
Lucas
Se genera 404 File not found. si utilizo URI /pageo/page/id
Industrial
¿Qué pasa cuando haces justo try_files $uri $uri/ /index.php?
Lucas
Index.php funciona bien, pero todo lo que debería reescribirse termina en 404's
Industrial
Tratar try_files $uri $uri/ /index.php?$args. Debería poder obtener la URL con $_SERVER['REQUEST_URI']. $ _GET debería funcionar normalmente.
Lucas

Respuestas:

9

Esto debería funcionar:

location / { 
    try_files $uri $uri/ @rules; 
} 

location @rules { 
    rewrite ^/([a-z]*)$ /index.php?action=$1; 
    rewrite ^/([a-z]*)/(.*)$ /index.php?action=$1&item=$2; 
}

location /index.php { 
    fastcgi_pass 127.0.0.1:9000; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
}
Luke
fuente
Hmm En su primer ejemplo, index.php se cargará, pero cualquier archivo estático o solicitud de URI como /page1/itemdevolverá index.php
Industrial
Eso es extraño. try_files debería encargarse de eso.
Lucas
Intenté el segundo ejemplo también. Mismo problema allí
Industrial
¿Asumo que try_files $uri $uri/funciona con archivos estáticos?
Lucas