Nginx重写 - 最后被忽略?

时间:2016-03-30 00:41:24

标签: nginx rewrite

在Apache中,这种逻辑运行良好 - 根据文档,也可以使用Nginx。

location = /login/ {    rewrite ^(.*)$ /login.php last; }
rewrite ^/([^/]*)/$ /page.php?c=$1 last;

理想情况下,domain.com/login/会指向login.php

其他任何内容都会指向page.php,并传递细节。 但是,所有请求都定向到page.php

缺少什么? :)

1 个答案:

答案 0 :(得分:0)

我想,你错误地认为指令的顺序很重要,但事实上并非如此。 Nginx具有严格的指令执行顺序,“服务器级”rewrite在尝试匹配location之前有效。

您应该避免使用“服务器级”rewrite。在这种情况下,我会写:

location / {
    rewrite ^/([^/]*)/$ /page.php?c=$1;
}

location = /login/ {
    rewrite ^ /login.php;
}

# I guess you have something like this too
location ~ \.php$ {
    ...
}