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