尝试匹配2个URL时出现Nginx重写问题
希望你们都好:) 我对一些Nginx配置有问题 要实现的目标似乎很简单:在匹配/和/登录时重写url尝试匹配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 我尝试了许多使用正则表达式的方法,例如,最明显的
请考虑下面的当前配置(我只保留了棘手的部分):
注意:/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;