Estou trabalhando em um código PHP antigo que foi servido anteriormente usando Apache + Multiviews + PATH_INFO. Agora estou tentando obter este site funcionando usando o nginx (que eu uso e adoro para todos os meus outros trabalhos mais recentes).
O problema é com URLs como / books / newreleases / 1420, que realmente precisam ser manipulados por /books.php (para que o php veja /books.php/newreleases/1420 com as informações apropriadas sobre PATH_INFO disponíveis).
Eu conheço todas as razões pelas quais o uso de multiviews é uma má ideia, mas o aprimoramento deste site para contorná-lo não é uma opção no momento.
Eu posso fazer este exemplo específico funcionar através do uso de reescrita: ( rewrite ^/books/(.*)$ /books.php/$1;
), mas há muitos arquivos em todo o site para fazer a codificação manual de reescritas para cada coisa diferente de um último recurso. Além disso, isso me deixa triste.
Eu tenho lido todas as perguntas semelhantes aqui, mas não consigo encontrar uma resposta para este caso específico, nem posso descobrir se há uma maneira correta de usar o try_files para lidar com isso.
Aqui está a carne da minha configuração como está:
server {
server_name foo.com www.foo.com;
root /srv/www/foo.com/public_html;
rewrite_log on;
index index.html index.htm index.php;
location / {
rewrite ^/books/(.*)$ /books.php/$1;
try_files $uri $uri.php $uri/ =404;
}
location ~ ^.+\.php {
try_files $uri.php $uri/ =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9050;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
}
}