Php 将重写从Apache转换为NGINX
我有一个定制的PHP应用程序,它遵循基本的MVC开发模式。应用程序目录结构如下所示: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中使用以下命令,我可以让基本的“默认”应用程序正常工作
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;