简介
HTTP 重定向 是将一个域名或地址指向另一个的方法。有几种不同类型的重定向,每种对客户端浏览器意味着不同的事情。最常见的两种类型是临时重定向和永久重定向。
临时重定向(响应状态码 302 Found)在 URL 临时需要从不同位置提供服务时很有用。例如,如果您正在进行网站维护,您可能希望使用临时重定向,将您的域名重定向到一个解释页面,以通知您的访问者您很快就会回来。
另一方面,永久重定向(响应状态码 301 Moved Permanently)通知浏览器应该完全忘记旧地址,不再尝试访问它。当您的内容已经永久移动到新位置时,比如当您更改域名时,这是很有用的。
本指南将详细介绍如何在 Nginx 中实现每种重定向,并通过一些特定用例的示例进行说明。
先决条件
要按照本教程操作,您需要:
要按照本教程操作,您需要:
- 安装了 Nginx 并设置为提供您的网站的服务器。您可以在 Ubuntu 22.04、Debian 或 CentOS 的教程中找到一些示例和说明。
解决方案概述
在 Nginx 中,您可以使用内置的 rewrite
指令实现大多数重定向。这个指令在新安装的 Nginx 上默认可用,可以用于创建临时重定向和永久重定向。在其最简单的形式中,它至少需要两个参数:旧的 URL 和新的 URL。
您可以使用以下行在服务器配置中实现临时重定向:
server { . . . server_name www.domain1.com; rewrite ^/$ http://www.domain2.com redirect; . . . }
这个重定向指示浏览器将对 www.domain1.com 的所有请求重定向到 www.domain2.com。然而,这个解决方案只适用于单个页面,而不适用于整个站点。要重定向多个页面,您可以使用 rewrite 指令与正则表达式来指定整个目录,而不仅仅是单个文件。
redirect 匹配括号中的正则表达式模式。然后使用 $1 表达式在重定向目标中引用匹配的文本,其中 1 是匹配文本的第一组。在更复杂的示例中,后续匹配的组按顺序编号。
例如,如果您想临时重定向 www.domain1.com 中的每个页面到 www.domain2.com,您可以使用以下内容:
server { . . . server_name www.domain1.com; rewrite ^/(.*)$ http://www.domain2.com/$1 redirect; . . . } server { . . . server_name www.domain2.com; . . . }
默认情况下,rewrite
指令建立临时重定向。如果您想创建永久重定向,可以通过在指令末尾用 permanent
替换 redirect
来实现,如下所示:
rewrite ^/$ http://www.domain2.com permanent; rewrite ^/(.*)$ http://www.domain2.com/$1 permanent;
让我们继续看一些具体的示例。
示例 1 — 迁移到不同的域
如果您已经建立了网站,并希望将您的域更改为新地址,最好不要只是放弃旧域。如果您的内容没有任何关于如何找到其新位置的指示,书签到您的网站和位于互联网其他页面上的链接将会失效。在没有重定向的情况下更改域将导致您的网站失去来自先前访问者和旧链接的流量。
在这个示例中,我们将配置从旧域 domain1.com 到新域 domain2.com 的重定向。我们将在这里使用永久重定向,因为旧域将被弃用,所有流量应该从现在开始转到新域。
假设您已经将您的网站配置为从名为 domain1.com 的单个域提供服务,并已在 Nginx 中进行了如下配置:
server { . . . server_name domain1.com; . . . }
我们还假设您已经在 domain2.com
上提供了您未来版本的网站:
server { . . . server_name domain2.com; . . . }
让我们更改 domain1.com
的服务器块配置文件,以添加永久重定向到 domain2.com
:
server { . . . server_name domain1.com; rewrite ^/(.*)$ http://domain2.com/$1 permanent; . . . }
我们使用 rewrite 指令添加了上述重定向。^/(.*)$ 正则表达式匹配 URL 中 / 后面的所有内容。例如,http://domain1.com/index.html 将被重定向到 http://domain2.com/index.html。为了实现永久重定向,我们只需在 rewrite 指令后面添加 permanent。
示例2 —— 即使单页名称更改,也创建持久体验
有时,有必要更改已发布并在您的网站上接收流量的单个页面的名称。仅更改名称将导致访问原始URL的访问者出现404 Not Found错误,但您可以通过使用重定向来避免这种情况。这可以确保已经将您的旧页面加为书签或通过搜索引擎上的过时链接找到它们的人仍然可以访问正确的页面。
假设您的网站分别有两个名为products.html和services.html的产品和服务页面。现在,您决定用名为offers.html的单个优惠页面替换这两个页面。我们将为products.html和services.html配置一个简单的重定向到offers.html。
我们假设您的网站配置如下:
server { . . . server_name example.com www.example.com; . . . }
配置重定向就像使用两个重定向指令一样简单。
server { . . . server_name example.com www.example.com; rewrite ^/products.html$ /offer.html permanent; rewrite ^/services.html$ /offer.html permanent; . . . }
rewrite
指令接受需要重定向的原始地址以及新页面的目标地址。由于这里的更改不是临时的,我们在指令中也使用了permanent
。您可以使用任意多个这样的重定向,以确保您的访问者在移动站点内容时不会看到不必要的404 Not Found错误。
结论
您现在具备将请求重定向到新位置的知识。请确保使用正确的重定向类型,因为临时重定向的不当使用可能会损害您的搜索排名。
HTTP重定向还有多种其他用途,包括强制使用安全的SSL连接(即使用https而不是http)以及确保所有访问者最终只会进入网站的www.前缀地址。
正确使用重定向将使您能够利用当前的网络存在,同时使您能够根据需要修改站点结构。如果您想了解更多关于如何重定向您的访问者的方法,Nginx在官方文档的重写模块部分和创建重定向的官方博客文章中都有很好的文档。
以上就是使用Nginx创建临时和永久重定向的具体示例的详细内容,更多关于Nginx创建临时和永久重定向的资料请关注服务器之家其它相关文章!
原文链接:https://blog.csdn.net/rubys007/article/details/139378738