尝试匹配2个URL时出现Nginx重写问题

尝试匹配2个URL时出现Nginx重写问题,nginx,redirect,url-rewriting,location,Nginx,Redirect,Url Rewriting,Location,希望你们都好:) 我对一些Nginx配置有问题 要实现的目标似乎很简单:在匹配/和/登录时重写url 请考虑下面的当前配置(我只保留了棘手的部分): 注意:/login/branded/123/abc来自一个变量,仅当该变量存在时才处理第一个重写操作。这就是为什么第一次重写似乎是多余的 这个很好用。最终url的类型必须为/login?brandingId=$1&brandingHash=$2 我需要让它以同样的方式工作,不仅对/而且对/login 我尝试了许多使用正则表达式的方法,例如,最明显的

希望你们都好:)

我对一些Nginx配置有问题

要实现的目标似乎很简单:在匹配/和/登录时重写url

请考虑下面的当前配置(我只保留了棘手的部分):

注意:
/login/branded/123/abc
来自一个变量,仅当该变量存在时才处理第一个重写操作。这就是为什么第一次重写似乎是多余的

这个很好用。最终url的类型必须为
/login?brandingId=$1&brandingHash=$2
我需要让它以同样的方式工作,不仅对
/
而且对
/login

我尝试了许多使用正则表达式的方法,例如,最明显的方法是
rewrite^/(login)?$/login/branded/123/abc重定向(或
重写^(/(登录)?)$…

还尝试通过将其拆分为两行来测试它是否是正则表达式问题:

rewrite ^/$ /login/branded/123/abc redirect;
rewrite ^/(login)?$ /login/branded/123/abc redirect;

rewrite ^/login.php /login?shape=tiny redirect;
rewrite (?i)^/login/branded/([0-9]+)/(.+) /login?brandingId=$1&brandingHash=$2 redirect;
甚至在位置级别使用
位置~^/(登录)${…
另外,在阅读了一些Nginx文档后,尝试用
last
break
语句替换
redirect

但是一次又一次出现的问题是,当我尝试访问/or/login url时,会得到无限的重定向(太多的重定向)

我猜重写规则会陷入无限循环,但我不知道如何处理它

用人类的话来说,我想做的是:

如果您到达的严格url是
/
/login
,则url应重写为
/login/branded/123/abc
然后,也只有这样,url才会被重写为
/login?brandingId=$1&brandingHash=$2
,并且可以处理重定向

希望解释可以


非常感谢您提供的任何帮助!

重写
对不包含查询字符串的标准化URI进行操作。如果您想匹配
/
/login
而不带参数,则需要使用
映射
块和/或
If$request\u URI
$args
e> 声明。例如。
rewrite ^/$ /login/branded/123/abc redirect;
rewrite ^/(login)?$ /login/branded/123/abc redirect;

rewrite ^/login.php /login?shape=tiny redirect;
rewrite (?i)^/login/branded/([0-9]+)/(.+) /login?brandingId=$1&brandingHash=$2 redirect;