Nginx。重写除一个路径以外的所有请求
问题描述:
这是我在配置文件中的重写规则。Nginx。重写除一个路径以外的所有请求
location/{
rewrite ^/(.*)(?:\?(.*))?$ /mis/page/home last;
rewrite ^/login(\?.*)?$ /account/page/login$1 last;
try_files $uri $uri/ /index.php;
rewrite ^(.+)$ /index.php?_url=$1 last;
}
我想重写/login
到/account/page/login$1
和所有其他请求/mis/page/home
,然后所有请求应rewrited到index.php文件。
但是,这与上面的配置,我在error.log
得到了来自服务器和错误消息500 Internal Error
是:
rewrite or internal redirection cycle while processing "/mis/page/home"
我如何能实现我的要求?
谢谢。
答
我猜你试图将/account/page/login$1
或/mis/page/home
提供给你的/index.php?_url=
?!因为这是最后一次重写的功能。这是一个全面的。
location/{
rewrite ^/login(\?.*)?$ /account/page/login$1 last;
rewrite !^/login /mis/page/home last;
try_files $uri $uri/ /index.php;
rewrite ^(.+)$ /index.php?_url=$1 last;
}
答
你似乎是寻找您rewrite
语句的正则表达式字面?
,但nginx
使用标准化 URI其被剥离的查询字符串。有关详细信息,请参阅this document。
如果默认是使用/index.php
与_url=/mis/page/home
参数,它可以直接在try_files
语句构成的。
为了保持事物分区,请为/login
URI使用单独的位置块。
也许我过于简化您的要求,但是这是我的意思是:
location/{
try_files $uri $uri/ /index.php?_url=/mis/page/home;
}
location = /login {
rewrite^/index.php?_url=/account/page/login last;
}
你所需要的*所有其他*手段,因为目前,'/ MIS /页/ home'包括更好的主意在*所有其他*。重写两次的目的是什么?你的意思是让'/ mis/page/home'成为一个重定向吗? –
我想要将所有请求重写为“/index.php?_url=”,并且我需要所有请求呈现除“/ login”之外的同一页面。 – LCB