介绍
HTTP 重定向 是指向一个域或地址到另一个方法. 有几种不同的重定向,每个重定向都意味着客户端浏览器的不同。
Temporary redirects(响应状态代码 302 找到 )是有用的,如果 URL 暂时需要从不同的位置提供服务.例如,如果您正在进行网站维护,您可能希望从您的域名使用暂时的重定向到一个解释页面,以告知您的访问者您将很快回来。
Permanent redirects(响应状态代码 301 永久移动 ),另一方面,告知浏览器应该完全忘记旧地址,不再试图访问它。
本指南将更深入地解释如何在 Nginx 中实施每个类型的重定向,并通过一些具体使用案例的示例。
前提条件
要遵循本教程,您将需要:
- 有 Nginx 的服务器安装并设置为您的网站(s)提供服务。您可以在 Ubuntu 22.04, Debian或 CentOS的教程中找到一些示例和说明。
解决方案一眼
在 Nginx 中,您可以使用内置的重写
指令实现大多数重定向,此指令在新的 Nginx 安装中默认可用,可用于创建临时和永久重定向。
您可以在服务器配置中使用以下行实现临时重定向:
1[label Temporary redirect with rewrite]
2server {
3 . . .
4 server_name www.domain1.com;
5 rewrite ^/$ http://www.domain2.com redirect;
6 . . .
7}
此重定向指示浏览器将所有请求的www.domain1.com
导向到www.domain2.com
。然而,此解决方案只适用于单个页面,而不是整个网站。
重定向
匹配平行表达式模式,然后使用$1
表达式引用重定向目标中的匹配文本,其中1
是匹配文本的第一个组。
例如,如果您想暂时将www.domain1.com
中的每个页面重定向到www.domain2.com
,您可以使用以下方法:
1[label Temporary redirect with rewrite]
2server {
3 . . .
4 server_name www.domain1.com;
5 rewrite ^/(.*)$ http://www.domain2.com/$1 redirect;
6 . . .
7}
8
9server {
10 . . .
11 server_name www.domain2.com;
12 . . .
13}
默认情况下,重写
指令设置了一个临时重定向. 如果您想创建一个永久重定向,您可以通过在指令末尾替换重定向
为永久
,如下:
1[label Permanent redirects]
2rewrite ^/$ http://www.domain2.com permanent;
3rewrite ^/(.*)$ http://www.domain2.com/$1 permanent;
让我们再来谈谈一些具体的例子。
示例 1 - 迁移到不同的域名
如果您已经建立了网络存在,并希望将您的域名更改为新地址,最好不要只是放弃您的旧域名. 对您的网站的标记和位于整个互联网的其他页面上的链接将被打破,如果您的内容消失而没有向浏览器指示如何找到新的位置。 改变域名而不重定向会导致您的网站失去之前的访问者和旧链接的流量。
在这个例子中,我们将配置一个重定向从旧的域名称为domain1.com
到新的域名称为domain2.com
。
假设您的网站已配置为由一个名为domain1.com
的单个域名提供服务,并已在 Nginx 中配置如下:
1[label /etc/nginx/sites-available/domain1.com]
2server {
3 . . .
4 server_name domain1.com;
5 . . .
6}
我们还将假设您已经在domain2.com
服务您的未来的网站版本:
1[label /etc/nginx/sites-available/domain2.com]
2server {
3 . . .
4 server_name domain2.com;
5 . . .
6}
让我们更改domain1.com
服务器封锁配置文件以添加永久重定向到domain2.com
:
1[label /etc/nginx/sites-available/domain1.com]
2server {
3 . . .
4 server_name domain1.com;
5 rewrite ^/(.*)$ http://domain2.com/$1 permanent;
6 . . .
7}
我们已经添加了上述重定向,使用重定向
指令。^/(.*)$
常规表达式对应于URL中的/
之后的一切。例如,http://domain1.com/index.html
将被重定向到http://domain2.com/index.html
。 为了实现永久重定向,我们仅仅在重定向
指令后添加永久性
。
<$>[注]
注: 请记住使用nginx -t
测试您的配置,然后在您更改后重新启动 Nginx。
示例 2 — 尽管单页名称更改,但创建持久的体验
有时,需要更改已经发布并收到您的网站流量的单个页面的名称。单独更改名称会导致访问者试图访问原始URL的404 Not Found错误,但您可以通过使用重定向来避免这一点。
假设您的网站有两个单独的产品和服务页面,分别称为products.html
和services.html
。
我们假定您的网站配置如下:
1[label Original server block configuration]
2server {
3 . . .
4 server_name example.com www.example.com;
5 . . .
6}
配置重定向就像使用两个重定向指令一样简单。
1[label Redirects added to the original configuration]
2server {
3 . . .
4 server_name example.com www.example.com;
5
6 rewrite ^/products.html$ /offer.html permanent;
7 rewrite ^/services.html$ /offer.html permanent;
8 . . .
9}
重写
指令接受必须重定向的原始地址以及新页面的目的地地址. 由于此处的更改不是暂时的,我们在指令中也使用了永久性
。
结论
请确保使用正确的重定向类型,因为不当使用临时重定向可能会损害您的搜索排名。
HTTP 重定向有许多其他用途,包括强制安全的 SSL 连接(即使用https
而不是http
)并确保所有访问者只能在网站的`www。
正确使用重定向将使您能够利用当前的网页存在,同时为您提供必要时更改网站结构的能力. 如果您想了解更多有关如何重定向访问者的方法,nginx 在官方文档的 重定向模块部分和 官方博客关于创建重定向中有很好的文档。