Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm working on some old PHP code of mine that was previously served using Apache+Multiviews+PATH_INFO. I'm now trying to get this site up and running using nginx (which I use and adore for all of my other more recent work).

The issue is with URLs such as /books/newreleases/1420, which actually needs to be handled by /books.php (so that php sees /books.php/newreleases/1420 with appropriate PATH_INFO info available).

I know all of the reasons why such use of multiviews is a bad idea, but redeveloping this site to work around it is not currently an option.

I can make this specific example work through use of rewrite: (rewrite ^/books/(.*)$ /books.php/$1;) but there are too many files across the entire site to make manual coding of rewrites for each anything other than a last resort. Plus, it makes me sad.

I've been reading through all of the similar questions on here but can't find an answer to this specific case, nor can I quite figure out if there's a correct way to use try_files to handle it.

Here's the meat of my config as it stands:

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;
    }
}
share|improve this question
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.