
Estou tentando reescrever um caminho específico usando o nginx. Configurei meu servidor usando nginx/php-fpm/php e está funcionando bem.
Tenho a seguinte configuração de servidor:
server {
listen 80;
server_name domain.com;
root /srv/www/domain.com/public;
location ~ ^/index.php($|/) {
fastcgi_split_path_info ^(.+.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
location / {
index index.php;
try_files $uri /index.php?$args;
}
}
E isso funciona. Ou seja, quando vou até http://domain.com
ele, o arquivo php é renderizado perfeitamente. No entanto, agora estou tentando reescrever um caminho específico /update/whatever
para /update.php?var=whatever
. Para fazer isso adicionei o seguinte location
bloco à minha configuração (antes do location ~ ^/index.php($|/) {
bloco):
location ~* ^\/update/(\w+)$ {
rewrite ^/update/(\w+)$ /update.php?browser=$1 last;
}
Mas quando tento acessar a URL, http://domain.com/update/whatever
ele baixa o arquivo php em vez de servir a saída analisada do PHP.
Também tentei adicionar as fastcgi
diretivas a esse bloco de localização com o mesmo resultado. Alguém pode me dizer o que eu errei na minha configuração?
Responder1
Está linha:
location ~ ^/index.php($|/) {
diz ao nginx para passar apenas index.php
para o interpretador php e você precisa que ele também se aplique a outros arquivos php, portanto, uma regra mais genérica é necessária aqui:
location ~ ^/(.*).php($|/) {