不带IF语句的NGINX重写

不带IF语句的NGINX重写,nginx,rewrite,Nginx,Rewrite,信息 我正在通过在NGINX中进行一些重写来清理我的web应用程序中的一些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

信息

我正在通过在NGINX中进行一些重写来清理我的web应用程序中的一些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>
rewrite^/p/(.*)$/index.php?p=$1;#页面重写自/p/
重写^/(.*)$/user.php?user=$1;#从中重写用户页面/
问题

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

我知道我需要对/p/进行检查,并将其与重写的其他内容区别对待,但在我的阅读中,我了解到,如果可能,由于潜在的意外结果,应避免使用IF语句

问题

在这种情况下,IF语句是可用的,如果是的话,它会是什么样子,以确保我检查来自用户的正确请求。如果有一种方法可以在不使用If语句的情况下进行检查,那么我想了解一下如何实现这一点

谢谢你的帮助

干杯


Jared

这就是最后一个标志的用途。只需将其添加到第一次重写中,如果匹配,则不会计算第二次重写:

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

就是我需要的小费。对
last
break
进行一些研究。干杯。
last
将执行内部重定向到目标,而
break
将停止所有重写处理,将$uri设置到目标,并移动到下一个请求处理阶段。