介绍
HTTP重定向的方式指向一个域或地址到另一个。有几种不同类型的重定向,每种都对客户端浏览器意味着不同。两种最常见的类型是临时重定向和永久重定向。 如果一个URL暂时需要从不同的位置提供 临时重定向 ( 实测响应状态代码 302)是有用的。例如,如果您正在执行网站维护,则可能希望使用从您的域到解释页面的临时重定向,以通知您的访问者您很快就会回来。 永久重定向 ( 301永久重定向响应状态代码 ),在另一方面,通知它应该完全忘记旧的地址,而不是试图再访问该浏览器。当您的内容被永久移至新位置时(例如更改域名时),这些功能很有用。 您可以通过在服务器配置文件中的服务器块条目中添加一行来在Nginx中创建临时重定向:rewrite ^/oldlocation$ http://www.newdomain.com/newlocation redirect;
同样,使用这样的行作为永久重定向:
rewrite ^/oldlocation$ http://www.newdomain.com/newlocation permanent;
本指南将更详细地介绍如何在Nginx中实现每种重定向,并通过一些特定用例的示例。
先决条件
要遵循本教程,您需要:- 安装了Nginx的一个服务器,并设置为使用服务器块为您的网站提供服务。您可以通过以下如何在设置Nginx的服务器模块(虚拟主机)做的Ubuntu 16.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
指令建立一个临时重定向。 如果你想创建一个永久重定向,您可以通过更换这样做
redirect
与
permanent
的指令的结尾,就像这样:
永久重定向
rewrite ^/$ http://www.domain2.com permanent;
rewrite ^/(.*)$ http://www.domain2.com/$1 permanent;
让我们继续一些具体的例子。
示例1 - 移动到不同的域
如果您已建立网站,并想将网域变更为新的地址,最好不要放弃旧网域。如果您的内容在没有任何有关如何找到其新位置的浏览器指示的情况下消失,您的网站的书签和网站的其他网页的链接将会中断。更改网域而不重定向会导致您的网站失去以前访问者的流量。 在这个例子中,我们将配置从被称为旧域名重定向domain1.com
来新建一个名为
domain2.com
。我们将在此处使用永久重定向,因为旧域名将被删除,所有流量应从现在开始到新域名。 让我们假设你有你的网站配置为通过所谓的单域担任
domain1.com
已经在Nginx的配置如下:
/etc/nginx/sites-available/domain1.com
server {
. . .
server_name domain1.com;
. . .
}
我们还假设你已经在服务你将来的版本的网站
domain2.com
:
/etc/nginx/sites-available/domain2.com
server {
. . .
server_name domain2.com;
. . .
}
让我们改变了
domain1.com
服务器模块配置文件中添加一个永久重定向到
domain2.com
:
/etc/nginx/sites-available/domain1.com
server {
. . .
server_name domain1.com;
rewrite ^/(.*)$ http://domain2.com/$1 permanent;
. . .
}
我们添加使用上述重定向
rewrite
指令。 该
^/(.*)$
正则表达式匹配后的一切
/
在URL中。 例如,
http://domain1.com/ index.html
将被重定向到
http://domain2.com/ index.html
。 为实现永久重定向,我们只需添加
permanent
后
rewrite
指令。
注意:请记住使用配置更改后重新启动Nginx的systemctl restart nginx
。
示例2 - 创建持久化体验,尽管单页名称更改
有时,您必须更改已发布并在您的网站上获得流量的各个网页的名称。仅更改名称会导致尝试访问原始网址的访问者发生404未找到错误,但您可以通过使用重定向避免此错误。这样可确保将您的旧网页添加为书签或通过搜索引擎上的过时链接找到的网页仍然会到达正确的网页。 让我们想象一下你的网站有产品和服务的叫了两个单独的页面products.html
和
services.html
分别。 现在,你已经决定更换这两个页面与被称为单一报价页面
offers.html
代替。 我们将配置一个简单的重定向
products.html
和
services.html
到
offers.html
。 我们假设您的网站配置如下:
假定的原始服务器块配置
server {
. . .
server_name example.com www.example.com;
. . .
}
配置重定向是使用两个简单
Redirect
指令。
重定向添加到原始配置
server {
. . .
server_name example.com www.example.com;
rewrite ^/products.html$ /offer.html permanent;
rewrite ^/services.html$ /offer.html permanent;
. . .
}
在
rewrite
指令接受具有被重定向原来的地址,以及一个新页的目的地地址。 由于这里的变化不是暂时的,我们使用
permanent
的指令也是如此。您可以使用尽可能多的重定向,如您希望确保您的访问者在移动网站内容时不会看到不必要的未找到错误。
结论
您现在有知识将请求重定向到新位置。请务必使用正确的重定向类型,因为不当使用临时重定向会损害您的搜索排名。 有HTTP多种其他用途重定向,包括强迫安全SSL连接(即使用https
而不是
http
),并确保所有游客最终将只在
www.
网站的前缀地址。 正确使用重定向将允许您利用您当前的网络呈现,同时允许您根据需要修改网站结构。如果您想了解更多,你可以重定向访问者的方式,Nginx的对在主题大文件
重写模块的官方文档和部分
创建重定向官方博客文章 。