将重写从Apache转换为NGINX

时间:2018-04-09 23:07:05

标签: php nginx

我有一个自定义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规则,以便我的应用程序正常运行吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

正如你所说,你传递额外的$ uri。试试这个:

<table>
<tbody>
<tr>
<td class="product"><div class="content-text"></div></td>
<td class="product"><div class="content-text"></div></td>
<td class="product"><div class="content-text"></div></td>
<td class="product"><div class="content-text"></div></td>
<td class="product"><div class="content-text"></div></td>
</tr>
<tr>
<td class="product"><div class="content-text"></div></td>
<td class="product"><div class="content-text"></div></td>
<td class="product"><div class="content-text"></div></td>
<td class="product"><div class="content-text"></div></td>
<td class="product"><div class="content-text"></div></td>
</tr>
.
.
.
</tbody>
</table>