Я работаю над своим старым PHP-кодом, который ранее обслуживался с использованием Apache + Multiviews + PATH_INFO. Сейчас я пытаюсь запустить этот сайт с помощью nginx (который я использую и обожаю во всех своих последних работах).
Проблема связана с URL-адресами, такими как / books / newreleases / 1420, которые на самом деле должны обрабатываться /books.php (чтобы php видел /books.php/newreleases/1420 с соответствующей доступной информацией PATH_INFO).
Я знаю все причины, по которым такое использование многовидовых изображений является плохой идеей, но переделать этот сайт для решения этой проблемы в настоящее время невозможно.
Я могу заставить этот конкретный пример работать, используя rewrite: (rewrite ^/books/(.*)$ /books.php/$1;
), но на всем сайте слишком много файлов, чтобы вручную кодировать перезапись для чего-либо, кроме крайней меры. К тому же это меня огорчает.
Я прочитал здесь все похожие вопросы, но не могу найти ответа на этот конкретный случай, и я не могу понять, есть ли правильный способ использовать try_files для его решения.
Вот суть моего конфига в его нынешнем виде:
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;
}
}