我试图重写到一个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,这是您原始方法中问题的一部分。