Riscrivere i file di prova di nginx


8

Sto provando a convertire una riscrittura molto semplice da una versione precedente di nginx a quella attuale, simile al seguente:

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

Questo è quanto sono arrivato lontano. Viene visualizzata la pagina dell'indice, ma qualsiasi pagina che dovrebbe essere riscritta come sopra, invece genera 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;
    }
}

Cosa sto facendo di sbagliato qui?


Cosa sta succedendo esattamente? Parte del problema è $ uri e $ args non sono codificati correttamente.
Luca,

404 viene generato File not found. se utilizzo URI /pageo/page/id
Industrial

Cosa succede quando fai proprio try_files $uri $uri/ /index.php?
Luca,

Index.php funziona bene, ma tutto ciò che dovrebbe essere riscritto finisce negli anni 404
Industrial

Prova try_files $uri $uri/ /index.php?$args. Dovresti essere in grado di ottenere l'URL con $_SERVER['REQUEST_URI']. $ _GET dovrebbe funzionare normalmente.
Luca,

Risposte:


9

Questo dovrebbe funzionare:

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

Hmm. Nel tuo primo esempio, verrà caricato index.php, ma tutti i file statici o richieste URI come /page1/itemrestituiranno index.php
Industrial

È strano. try_files dovrebbe occuparsene.
Luca,

Ho provato anche il secondo esempio. Stesso problema lì
Industrial

Suppongo che funzioni try_files $uri $uri/con file statici?
Luca,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.