Php 将重写从Apache转换为NGINX

Php 将重写从Apache转换为NGINX,php,nginx,Php,Nginx,我有一个定制的PHP应用程序,它遵循基本的MVC开发模式。应用程序目录结构如下所示: admin/ default/ index.php 在admin中还有另一个index.php(它是如何处理对/admin的请求的) 在apache中,这是通过在每个目录(admin和doc root)中放置一个.htaccess文件来实现的,设置了一个重新布线,应用程序就可以工作了。在NGINX中,它似乎并不那么简单 通过在我的nginx.conf中使用以下命令,我可以让基本的“默认”应用程序正常工作

我有一个定制的PHP应用程序,它遵循基本的MVC开发模式。应用程序目录结构如下所示:

admin/   
default/
index.php
在admin中还有另一个index.php(它是如何处理对/admin的请求的)

在apache中,这是通过在每个目录(admin和doc root)中放置一个.htaccess文件来实现的,设置了一个重新布线,应用程序就可以工作了。在NGINX中,它似乎并不那么简单

通过在我的nginx.conf中使用以下命令,我可以让基本的“默认”应用程序正常工作:

if (!-e $request_filename)
{
    rewrite ^(.+)$ /index.php?path=$1 last;
}
(我们在vhost上运行,因此我无法引用位置/或我得到重复的规则错误)

这使前端应用程序可以工作,但当我尝试访问应用程序的/admin部分时,登录屏幕会加载,但当我尝试提交并尝试访问端点“admin/index/index”时,它会失败,因为我的重写规则不起作用。以下是我在NGINX中重写的内容:

location /admin {
    try_files $uri $uri/ /admin/index.php?path=$uri&$args;
}
我认为问题在于传入的$uri是/admin/index/index,而不是它应该是什么,并且在Apache:/index/index下

有人能帮我纠正这些NGINX规则,让我的应用程序正常工作吗


提前谢谢。

正如您所说,您需要传入额外的$uri。试试这个:

location /admin {
  try_files $uri $uri/ /admin/index.php?$args;
}

非常感谢。这确实奏效了。在把它弄得一团糟之后,我最终做了这样的重写:rewrite/admin/(.*)/admin/index.php?path=$1 break;重写^(+)$/index.php?path=$1 last;