信息
我正在通过在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语句的情况下进行检查,我希望能够深入了解这一点。
感谢任何帮助。
干杯,
贾里德
答案 0 :(得分:3)
这是最后一个标志。只需将其添加到第一次重写,如果匹配,则不会评估第二次重写:
rewrite ^/p/(.*) /index.php?p=$1 last;
rewrite ^/(.*) /user.php?user=$1;