我正在尝试部署一个用于构建 REST 服务的 Web 应用程序。该应用程序使用 PHP 构建,您可以自行安装 Web 服务器和数据库软件。我使用的是 Nginx 和 MySQL (MariaDB)。我已成功使用以下 Nginx 配置部署它:
server {
listen 80;
listen [::]:80;
root /var/www/fusio;
index index.php index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
location ~ ^.+.php {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
}
}
当我在应用程序中部署新的端点时,它们会部署在http://localhost/local/index.php/my_url。我希望他们部署在http://localhost/my_url。该应用程序的开发人员熟悉 Apache,他建议我启用mod_rewrite,据我了解,这实际上是一种重定向功能。
我想知道如何在不破坏我设置的 fastcgi 配置的情况下在 Nginx 中执行相同的重定向。这可能吗?如果可以,怎么做?rewrite
我尝试过的现有方法(例如rewrite ^/index.php/(.*) /$1 permanent;
和)rewrite ^(.*)$ /index.php
似乎不起作用。
提前致谢
答案1
Richard Smith 回答了我上面的问题;用(等同于)替换我的指令中的行=404;
部分允许 php 请求继续,就像它们已经访问了相应的 index.php 一样,但不会在地址中显示它们,也不会影响应用程序运行其内部脚本的能力。谢谢 Richard!try_files
location /
/local/index.php$uri;