Nginx. Usando redirecionamentos com expressões regulares

1

Sou novato no nginx. Eu tenho o nginx antes do Apache e estou com problemas.

Parece que preciso de 2 regras na configuração:

Regra 1) se tivermos url "/ my_path", não tocamos nele, mas o usuário acessa "/my_path.php"

Regra 2) se tivermos url "/my_path.php" alteramos para "/ my_path" e o usuário vai para "/my_path.php" PORQUE voltamos para a regra 1.

Eu acho que isso é necessário para SEO?

Minha configuração, por exemplo, é isso ...

server {
    listen 8080;
    server_name my_apache_server;

    location / {
        proxy_pass http://my_apache_server/;
    }

    location ~^\/(.+)$ {
        rewrite ^\/(.+)$ /$1.php break;
        proxy_pass http://my_apache_server/;
    }

    location ~^\/(.+)\.php$ {
        proxy_redirect http://my_apache_server/$1 http://my_apache_server/error.php;
    }

    ...
}

Mas o nginx mostra um erro:

nginx: [emerg] "proxy_pass" cannot have URI part in location given 
by regular expression, or inside named location, or inside "if" statement, 
or inside "limit_except" block

Pelo que entendi, o proxy_pass não pode ser usado com expressões regulares. Isso está correto? Eu estou pensando que minha configuração está errada?

Alguém pode ajudar? Obrigado pela sua ajuda com antecedência.

MINHA SOLUÇÃO - funciona

    # index page
    location / {
        proxy_pass http://my_apache_server;
    }

    # redirect(301) real "name.php" file to "name"
    location ~ ^/([A-Za-z_]+).php$ {
        rewrite  ^/([A-Za-z_]+).php$  /$1  permanent;
    }

    # not existen a-z file name to name.php
    location ~ ^/([A-Za-z_]+)$ {
        proxy_pass http://my_apache_server/$1.php;
    }
    
por see613 24.02.2014 / 07:15

1 resposta

2

Não é possível proxypass para um URI, isso criaria uma barra dupla após o URL ( http://my_apache_server//$.php ).

Tente:

location ~^\/(.+)$ {
  rewrite ^\/(.+)$ /$1.php break;
  proxy_pass http://my_apache_server;
}
    
por 24.02.2014 / 09:01