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”。