我正在处理一些旧的 PHP 代码,这些代码以前是使用 Apache+Multiviews+PATH_INFO 提供的。我现在正尝试使用 nginx(我最近所有其他工作都使用它,并且非常喜欢它)来启动并运行这个网站。
问题出在诸如 /books/newreleases/1420 之类的 URL 上,实际上需要由 /books.php 处理(以便 php 能够看到 /books.php/newreleases/1420 并且具有适当的 PATH_INFO 信息)。
我知道为什么使用多视图是个坏主意,但重新开发这个网站来解决这个问题目前不是一个选择。
我可以通过使用重写来使这个特定示例工作:(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;
}
}