Nginx regravam regras diferentes do que o Apache

1

Atualmente tenho regras de reescrita no NGINX, mas elas não estão funcionando. Eu os converti do apache para o nginx usando a ferramenta Winginx HTACCESS .

Minha configuração atual do nginx:

location / {
        try_files $uri $uri.html $uri/ @rewrites;
    }

    location @rewrites {
        rewrite ^crime/([^/]*)/([^/]*).php$ /crime.php?cid=$1&csrf_token=$2 break;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

O acima não funciona, quando eu vou para /crime/1/csrftoken.php eu recebo uma página 404 não encontrada.

Quando eu tive no Apache, funcionou como deveria estar usando esta linha:

RewriteRule ^crime/([^/]*)/([^/]*).php$ /crime.php?cid=$1&csrf_token=$2 [L]

Existe alguém que poderia me apontar na direção certa, pois acho estranho quando isso funciona no Apache, mas não no Nginx.

Obrigado.

    
por user299127 26.05.2018 / 20:42

1 resposta

0

Em nginx, as instruções rewrite usam expressões regulares no URI de solicitação normalizada, que sempre começa com / . Sua sequência de correspondência não corresponde a nada que comece com / , e é por isso que não funciona.

Tente isso:

location @rewrites {
    rewrite ^/crime/([^/]*)/([^/]*).php$ /crime.php?cid=$1&csrf_token=$2 break;
}

Eu também usaria correspondência de expressão regular mais específica em vez de corresponder a tudo, exceto / . Por exemplo, se cid for apenas números, usaria ^/crime/([0-9]+)/ para a primeira parte da sequência de correspondência.

    
por 28.05.2018 / 08:40

Tags