2017-04-04 113 views
0

这是我在配置文件中的重写规则。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" 

我如何能实现我的要求?

谢谢。

+0

你所需要的*所有其他*手段,因为目前,'/ MIS /页/ home'包括更好的主意在*所有其他*。重写两次的目的是什么?你的意思是让'/ mis/page/home'成为一个重定向吗? –

+0

我想要将所有请求重写为“/index.php?_url=”,并且我需要所有请求呈现除“/ login”之外的同一页面。 – LCB

回答

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; 
} 
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; 
} 
相关问题