【问题标题】:NGINX Redirect Loop for a single page单个页面的 NGINX 重定向循环
【发布时间】:2013-05-08 23:19:24
【问题描述】:

我有一个 NGINX 网络服务器,我正在尝试重定向页面
www.example.com/newsletter

www.example.com/blog/category/newsletter

但我的重定向规则匹配两个位置并导致重定向循环。如何让规则忽略 /blog/category 页面,同时仍重定向 /newsletter 页面?

我使用的重定向规则是:
rewrite ^/newsletter$ https://www.example.com/blog/category/newsletter permanent;


我不太擅长正则表达式,我什至不确定我需要使用什么来将最终页面排除在重定向循环之外。

【问题讨论】:

  • 这不可能是唯一的问题。你能提供整个服务器块吗?我会在我拥有它的那一刻调试你的 nginx 配置。重写规则与某些东西发生冲突,但不只是与它本身发生冲突。
  • 您可能需要添加一些上下文,例如位置部分。在重写结束时将permanent 替换为permanent break 是否可以解决问题?
  • 这个rewrite 指令肯定只匹配/newsleter。您应该刷新所有可能适用于此处的缓存(包括您的浏览器)。如果您之前测试过其他表达式,重定向响应可能仍会被缓存(因为它是permanent)。您也可以尝试curl -v 来检查服务器的实际响应。
  • 我确实清除了缓存,由于某种原因它与两者中的 /newsletter 匹配并导致重定向循环。使用下面的位置块解决方案解决了这个问题。

标签: regex redirect nginx


【解决方案1】:

我不会用重写来处理它,试试这个

location = /newsletter {
    return 301 $scheme://www.example.com/blog/category/newsletter;
}

【讨论】:

  • 使用位置块有效。不过我想知道,为什么您更喜欢使用位置块来处理它?使用它比仅在位置块之外进行重写更好吗?
  • 重点不是位置块,是避免重写,nginx的返回速度比重写快,所以在性能方面这样做比运行重写引擎Check this link, it's very useful跨度>
猜你喜欢
  • 1970-01-01
  • 2013-11-27
  • 2014-03-09
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多