php-fpm不能用于nginx重写

我试图重写到一个PHP文件在Nginx中没有改变的URL,但PHP-FPM没有处理文件,我得到的是一个500。

如果我删除重写并直接访问文件,它的工作原理,所以.php文件没有错。

server { listen 80; root /var/www/example.com/public_html; server_name example.com www.example.com; index index.html index.php; add_header Access-Control-Allow-Origin *; location ~ ^/InfoCenter/api/.*$ { rewrite "/InfoCenter/api/(.*)" /InfoCenter/api/index.php last; } location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/run/php/php7.0-fpm.sock; include fastcgi_params; } location ~/\.htaccess { deny all; } } 

您的信息中心的位置也捕捉到您要重写的位置,因为它再次匹配正则expression式。 即您的用户将被重写为/InfoCenter/api/index.php ,然后只是被挂在同一个位置。 然后永远不会发送到PHP。

尝试更改PHP位置为:

 位置^〜。* \。php $ {
     ...
 } 

正则expression式前缀的位置更改将优先于其他位置。

您不需要在/InfoCenter/api位置使用正则expression式。 您可以使用:

 location /InfoCenter/api { try_files /InfoCenter/api/index.php; } 

这样您将避免再次匹配/InfoCenterpath的问题。 前缀匹配比正则expression式匹配要快一些。

此外, try_files是一个简单的方法来转发所有请求与该前缀到index.php文件。 它也不会重写URL,这是您原始方法中问题的一部分。