Convertendo regras nginx de .htaccess

3

Estou com problemas para converter algumas regras .htaccess em um servidor nginx.

RewriteRule ^$ index.php [L]
RewriteRule ^([A-Za-z0-9-]+)?$ index.php?section=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?section=$1&go=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?section=$1&go=$2&action=$3 [L]

Alguém poderia ajudar a converter e explicar como essas expressões regulares seriam convertidas para o nginx?

Não tenho certeza da sintaxe, de acordo com a documentação do nginx. Tentei o seguinte:

server {
  rewrite ^([A-Za-z0-9-]+)?$ index.php?section=$1&go=$2;
}

Eu também tentei dentro de um bloco de localização raiz, como mostrado abaixo. Não sei como o try_files afeta isso.

location / {

    rewrite ^$ /index.php break;
    rewrite ^([A-Za-z0-9-]+)?$ /index.php?section=$1 break;
    rewrite ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2 break;
    rewrite ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2&action=$3 break;
    rewrite ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2&action=$3&id=$4 break;

    try_files $uri $uri/ /index.php?$args;
}

Isso não parece funcionar. Isso precisa ser colocado dentro de um bloco de localização primeiro?

As URLs que estou testando são as seguintes. O nome do host foi removido porque não tenho permissão para compartilhá-lo.

http://www.example.com/entry
http://www.example.com/volunteers
http://www.example.com/contact

Basicamente, a página está sendo carregada como se index.php estivesse sendo acessado e as seções não estivessem sendo carregadas se isso fizesse sentido. Nada parece ser passado para o script index.php.

    
por Luke 19.04.2017 / 14:16

1 resposta

3

O bloco location é o lugar habitual para as suas diretrizes rewrite , portanto você acertou.

A única coisa que falta visivelmente na sua configuração é o / em suas expressões regulares:

location / {
  rewrite ^/$ /index.php break;
  rewrite ^/([A-Za-z0-9-]+)?$ /index.php?section=$1 break;
  rewrite ^/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2 break;
 }
    
por 19.04.2017 / 16:07