重写规则修改URL的一部分或全部。这样做有两个原因。第一,告知客户资源的重新定位,第二,控制流向Nginx。广泛用于重写URL的两种通用方法是返回指令和重写指令。其中,重写指令的功能更强大。让我们讨论一下为什么会这样,以及如何重写URL。
返回 指令
Return 是重写服务器或本地机器中声明的URL的最简单方法。
返回 在服务器中。
假设你的网站被迁移到一个新的域名,所有现有的URL都将被重定向到这里;运行下面的代码,将任何新的请求导向你的网站。

这将把所有打到www.previousdomain.com 的请求引导到www.currentdomain.com。 一旦运行上述代码,www.previousomain.com 就会发出 "301 "错误,并产生新的访问请求。两个变量,request_uri, 从输入的URL中获取数据。'*Listen 80′*表示该块同时适用于HTTP和HTTPS请求。
返回 在本地
如果你想代替一个完整的域名重定向页面,你可以在位置块下使用return 指令。
重写指令
就像return 指令一样,重写指令也可以同时作用于服务器和本地。与return指令相比,重写 指令可以处理复杂的URL替换。以下是重写的语法。

regex是一个正则表达式,与传入的URI相匹配。
replacement_url 是用来改变请求的URI的字符串。
标志 的值决定是否有必要进行更多的重定向或处理。
静态页面重写
假设你想把页[面https://example.com/tutorial重定向到example.com/new_page。*该…:

这一行的位置=/tutorial 定义了任何关于教程的标识都要被替换。重写 指令说要用'new_page.html' 替换符号*^* 和$内的短语,然后中断该指令。符号'?'被称为非贪婪的修饰符,之后模式搜索就会停止。
动态页面 重写
考虑将URLwww.sample.com/user.php?id… 改写[为https://www.sample.com/user/11。*这里,user=11要被替换。通过使用静态重写方法,需要写10次重写命令。相反,让我们一次就完成它。

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的请求处理不会停止。
结论
return和rewrite指令可以用于在服务器和位置环境下重定向URL。虽然返回指令更简单,但重写指令被广泛使用,因为它也可以处理对URL的复杂修改/更新。