NGINX重写没有IF语句

时间:2012-04-02 04:33:11

标签: nginx rewrite

信息

我正在通过在NGINX中进行一些重写来清理我的网络应用中的一些URL。

我正在做的第一次重写是处理分页 [ex。 http://domain.com/p/2] ,第二个是用户个人资料区 [例如。 http://domain.com/username]

我正在使用的重写如下:

rewrite ^/p/(.*)$ /index.php?p=$1; # paging rewrite from /p/<page_number>
rewrite ^/(.*)$ /user.php?user=$1; # user page rewrite from /<username>

问题

我遇到的问题应该很容易发现。因为我使用的是/ p /和/ username,所以重写不区分两者,最终认为/ p / 2应该作为用户页面传递。

我知道我需要对/ p /进行检查并以不同于其他任何方式对其进行重写,但在我的阅读中我已经读过,如果可能的话,由于潜在的意外结果,应该避免使用IF语句。

问题

这是一个IF语句可以使用的情况,如果是这样的话,那将是什么样的,以确保我检查来自用户的正确请求。如果有一种方法可以在没有IF语句的情况下进行检查,我希望能够深入了解这一点。

感谢任何帮助。

干杯,

贾里德

1 个答案:

答案 0 :(得分:3)

这是最后一个标志。只需将其添加到第一次重写,如果匹配,则不会评估第二次重写:

rewrite ^/p/(.*) /index.php?p=$1 last;
rewrite ^/(.*) /user.php?user=$1;