这是我在配置文件中的重写规则。
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
,然后所有请求都应重新写入index.php。
但是通过上面的配置,我从服务器获得了500 Internal Error
,error.log
中的错误消息是:
rewrite or internal redirection cycle while processing "/mis/page/home"
如何实施我的要求?
谢谢。
答案 0 :(得分:0)
我猜您是要尝试向/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;
}
答案 1 :(得分:0)
您似乎在?
语句的正则表达式中查找文字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;
}