2012-04-02 55 views
1

资讯NGINX重写没有IF语句

我做在NGINX一些重写清理在我的web应用程序的几个网址。

我正在做的第一个重写是用于处理分页[例如, 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 /和/用户名,重写不会区分这两者,并最终将thinking/p/2作为用户页面传递。

我知道我需要运行一个/ p /的检查,并以不同于其他任何重写的方式对待它,但在我的阅读中,我已阅读过IF语句,如果可能的话,由于潜在的意外结果,

问题

,这是将IF语句就可以使用,如果是的话你会看起来像要确保我检查,对来自用户的正常请求的情况下。如果有一种方法可以在没有IF语句的情况下进行检查,我希望能够通过一些见解来实现这一点。

感谢任何帮助。

干杯,

贾里德

回答

4

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

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

只是我需要的提示。对'last'和'break'做一些研究。干杯。 – Jared 2012-04-04 05:34:52

+0

'last'将执行到目标的内部重定向,而'break'将简单地停止所有的重写处理,将$ uri设置为目标,然后进入下一个请求处理阶段。 – kolbyjack 2012-04-04 13:30:47