Репликация Apache Multiviews + PATH_INFO в Nginx

Я работаю над моим старым 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;
    }
}

0 ответов

Другие вопросы по тегам