学习Nginx中的重写规则

177 阅读4分钟

重写规则修改URL的一部分或全部。这样做有两个原因。第一,告知客户资源的重新定位,第二,控制流向Nginx。广泛用于重写URL的两种通用方法是返回指令和重写指令。其中,重写指令的功能更强大。让我们讨论一下为什么会这样,以及如何重写URL。

对NGINX有一个更好的了解,会让我们更容易理解这个博客。

返回 指令

Return 是重写服务器或本地机器中声明的URL的最简单方法。

返回 在服务器中。

假设你的网站被迁移到一个新的域名,所有现有的URL都将被重定向到这里;运行下面的代码,将任何新的请求导向你的网站。

Return in Server - Rewrite rule in Ngnix

这将把所有打到www.previousdomain.com 的请求引导到www.currentdomain.com。 一旦运行上述代码,www.previousomain.com 就会发出 "301 "错误,并产生新的访问请求。两个变量,scheme,和scheme*,和*request_uri, 从输入的URL中获取数据。'*Listen 80′*表示该块同时适用于HTTP和HTTPS请求。

返回 在本地

如果你想代替一个完整的域名重定向页面,你可以在位置块下使用return 指令。

重写指令

就像return 指令一样,重写指令也可以同时作用于服务器和本地。与return指令相比,重写 指令可以处理复杂的URL替换。以下是重写的语法。

rewrite directive - Rewrite rule in Ngnix

regex是一个正则表达式,与传入的URI相匹配。

replacement_url 是用来改变请求的URI的字符串。

标志 的值决定是否有必要进行更多的重定向或处理。

静态页面重写

假设你想把页[面https://example.com/tutorial重定向到example.com/new_page。*该…:

static page rewrite - Rewrite rule in Ngnix

这一行的位置=/tutorial 定义了任何关于教程的标识都要被替换。重写 指令说要用'new_page.html' 替换符号*^* 和$内的短语,然后中断该指令。符号'?'被称为非贪婪的修饰符,之后模式搜索就会停止。

动态页面 重写

考虑将URLwww.sample.com/user.php?id… 改写[为https://www.sample.com/user/11。*这里,user=11要被替换。通过使用静态重写方法,需要写10次重写命令。相反,让我们一次就完成它。

dynamic page rewrite - Rewrite rule in Ngnix

location = /user.php 这一行要求Nginx检查前缀'/user'。如前所述,Nginx将搜索介于*^* 和$的开头和结尾符号之间的短语,以及非贪婪的"?"修饰语。我们例子中的短语是一个用户范围。它在方括号内被称为[0-9]+。这个表达式中的反向参考在小括号中提到,并以1美元的符号来表示。所以,对于我们的例子,重写将自动发生在所有的用户身上。

动态引用下的一个特殊情况是多个反向引用。

现在,我们已经讨论了如何为简单和复杂的URL编写重写规则。

通过一些处理各种情况的例子来理解重写规则的详细工作。

规模性能,而不是价格今天就试试Engine Yard,在14天内享受我们巨大的支持和巨大的扩展潜力。

指令比较

让我们通过比较来分析这两个指令,并找出为什么重写衍生物更强大。

返回指令

  • 它的使用和理解都很简单。
  • 它可以在服务器和位置上下文中使用。
  • 它明确地提到了更正或更新的URL,以便客户在将来可以使用它们。
  • 返回指令也可以包括多个错误代码。
  • 对于代码301、302、303和307,URL参数定义重定向URL。

return (301 | 302 | 303 | 307) url。

  • 对于其他代码,文本要由用户明确提及。

return (1xx | 2xx | 4xx | 5xx) ['text']。

例如:返回401'拒绝访问,因为令牌已过期或无效'。

  • 该指令可用于服务器和位置块的返回URL都是正确的情况,重写的URL是用Nginx变量构建的。

重写指令

  • 它可以适应更复杂的URL修改,在这种情况下,需要捕捉没有Nginx变量的元素,或者需要更新路径中的元素。
  • 它可以在服务器和位置背景下使用。
  • 重写指令只能返回代码301或302。要适应其他代码,请在重写指令后明确添加返回指令。
  • 它可能不会向客户端发送重定向细节。
  • Nginx的请求处理不会停止。

结论

returnrewrite指令可以用于在服务器和位置环境下重定向URL。虽然返回指令更简单,但重写指令被广泛使用,因为它也可以处理对URL的复杂修改/更新。