我的nginx服务器上有一堆不同的规则,带有php-fpm。
简单的是重写,使用
将http://server/ $ 1?param = 1更改为http://server/ $ 1.php?param = 1location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
我还需要将http://server/abc/123重写为http://server/abc.php/123,并将其处理为php-fpm
这是fast-cgi代码:
location ~ [^/]\.php(/|$) {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
这是位置重写
location @abc-php {
rewrite ^(.*)/abc/(.*)$ $1/photo.php/$2 last;
}
但我一直得到404.我不确定我哪里出错了,任何帮助都会受到赞赏。
答案 0 :(得分:2)
您不会显示如何调用命名位置@abc-php
。我怀疑你有这样的东西来管理无扩展的PHP:
location / {
try_files $uri $uri/ @extensionless-php;
}
您的新重写规则可以添加到现有的命名位置,如下所示:
location @extensionless-php {
rewrite ^(.*)/abc/(.*)$ $1/photo.php/$2 last;
rewrite ^(.*)$ $1.php last;
}
但是,你的fast-cgi块无法处理path_info,所以你需要look here来获得传统智慧,或者使用类似的东西:
location ~ ^(?<script>.*\.php)(?<pathinfo>.*)$ {
try_files $script =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $pathinfo;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}