Mod rewrite Nginx。重写除一条路径外的所有请求

Mod rewrite Nginx。重写除一条路径外的所有请求,mod-rewrite,nginx,Mod Rewrite,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; } 我想将/

这是我在配置文件中的重写规则

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内部错误
,并且
Error.log中的错误消息是:

rewrite or internal redirection cycle while processing "/mis/page/home"
我如何实现我的要求


谢谢。

我想你是想把
/account/page/login$1
/mis/page/home
提供给你的
/index.php?\u 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
语句的正则表达式中查找literal
,但是
nginx
使用了一个从查询字符串中剥离的标准化URI。有关详细信息,请参阅

如果默认操作是将
/index.php
\u url=/mis/page/home
参数一起使用,则可以直接在
try\u 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/page/home
包含在所有其他内容中。重写两次的目的是什么?你的意思是使
/mis/page/home
重定向吗?我想将所有请求重写为“/index.php”\u url=“并且我需要所有请求都呈现相同的页面,除了“/login”。