前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Nginx创建临时和永久重定向

如何使用Nginx创建临时和永久重定向

原创
作者头像
宇cccc
修改2018-07-20 10:26:28
5.8K0
修改2018-07-20 10:26:28
举报

介绍

HTTP重定向是将一个域或地址指向另一个域或地址的方式。有几种不同的重定向,每种重定向都意味着与客户端浏览器不同。两种最常见的类型是临时重定向和永久重定向。

如果临时需要从其他位置提供URL,则表示临时重定向(响应状态码**302 Found**)。例如,如果您正在执行网站维护,您可以使用从当前域到解释页面的临时重定向来通知您的访问者。

永久重定向(响应状态代码**301 Moved Permanently**)是指通知浏览器内容已永久移动到新位置上(例如更改域名时)。

您可以通过在服务器配置文件中的服务器块条目中添加这样的行来在Nginx中创建临时重定向:

代码语言:txt
复制
rewrite \^/oldlocation\$ http://www.newdomain.com/newlocation redirect;

同样,使用这样的行进行永久重定向:

代码语言:txt
复制
rewrite \^/oldlocation\$ http://www.newdomain.com/newlocation permanent;

本指南将更深入地介绍如何在Nginx中实现各种重定向,并针对特定用例进行一些示例。

准备

要学习本教程,您需要:

  • 安装了Nginx的一台服务器,并设置为使用服务器块为您的网站提供服务。您可以按照如何在Ubuntu 16.04,Debian或CentOS上设置Nginx服务器块(虚拟主机)来完成。

关于Nginx其他的功能,可以参考腾讯云Nginx 中文开发手册

解决方案一览

在Nginx中,您可以使用内置rewrite指令完成大多数重定向。默认情况下,此指令在新的Nginx安装中可用,可用于创建临时和永久重定向。在最简单的形式中,它至少需要两个参数:旧URL和新URL。

您可以在服务器配置中使用以下行实现临时重定向:

代码语言:txt
复制
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,可以使用以下内容:

重写临时重定向

代码语言:txt
复制
server {

. . .

server\_name www.domain1.com;

rewrite \^/(.\\*)\$ http://www.domain2.com/\$1 redirect;

. . .}

server {

. . .

server\_name www.domain2.com;

. . .}

默认情况下,该rewrite指令建立临时重定向。如果你想创建一个永久重定向,您可以通过在该指令结束处把redirect 换成 permanent,就像这样:

永久重定向

代码语言:txt
复制
rewrite \^/\$ http://www.domain2.com permanent;
rewrite \^/(.\\*)\$ http://www.domain2.com/\$1 permanent;

让我们继续讨论一些具体的例子。

示例1 - 移动到不同的域

如果您已建立一个网络状态并希望将域名更改为新地址,则最好不要放弃旧域名。更改域名而不重定向会导致您的网站丢失以前访问者的流量。

在此示例中,我们从旧域domain1.com重定向到名为domain2.com的新域。我们将在此处使用永久重定向,因为旧域将被删除,并且所有流量应从现在开始进入新域。

假设您已将您的网站配置为已在Nginx中配置过的、从名叫domain1.com的单个域获取服务,如下所示:

/etc/nginx/sites-available/domain1.com

代码语言:txt
复制
server {
. . .
server\_name domain1.com;
. . .}

我们还假设您已经在domain2.com以下网站提供未来版本的服务:

/etc/nginx/sites-available/domain2.com

代码语言:txt
复制
server {
. . .
server\_name domain2.com;
. . .}

让我们更改domain1.com服务器块配置文件,将永久重定向添加到domain2.com:

/etc/nginx/sites-available/domain1.com

代码语言:txt
复制
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。

注意:请记住在使用systemctl restart nginx进行配置更改后重新启动Nginx 。

示例2 - 网页名称改变,仍可访问正确网页

有时,更改已在网站上发布和接收流量的各个页面的名称是有必要的。只更改名称会导致尝试访问原始URL的访问者出现404 Not Found错误,但您可以通过使用重定向来避免这种情况。这可以确保为旧页面添加书签或通过搜索引擎上过时的链接找到它们的用户仍然可以访问正确的页面。

如果你的网站有产品和服务两个单独的页面,分别是products.html和services.html。现在,用一个名offers.html的页面替换这两个页面。我们将配置一个简单的重定向从products.html和services.html到offers.html。

我们假设您的网站配置如下:

代码语言:txt
复制
server {
. . .
server\_name example.com www.example.com;
. . .}

配置重定向就像使用两个Redirect指令一样简单。

重定向已添加到原始配置中

代码语言:txt
复制
server {
. . .
server\_name example.com www.example.com;
rewrite \^/products.html\$ /offer.html permanent;
rewrite \^/services.html\$ /offer.html permanent;
. . .}

该rewrite指令接受必须重定向的原始地址以及新页面的目标地址。由于此处的更改不是临时更改,因此我们在指令中使用permanent。您可以使用尽可能多的重定向,以确保访问者在移动网站内容时不会看到不必要的Not Found错误。

结论

您现在可以将请求重定向到新位置。请务必使用正确的重定向类型,因为不正确使用临时重定向可能会影响您的搜索排名。

HTTP重定向有多种其他用途,包括强制安全SSL连接(例如:使用https而不是http)和确保所有访问者最终只能www.访问网站的前缀地址。正确使用重定向将允许您保留当前的Web的同时,根据需要修改站点结构。

如果对网站的部署与发布感兴趣,可以参考腾讯云学院的网站建设教程


参考文献:《How To Create Temporary and Permanent Redirects with Nginx》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 解决方案一览
  • 示例1 - 移动到不同的域
  • 示例2 - 网页名称改变,仍可访问正确网页
  • 结论
相关产品与服务
网站建设
网站建设(Website Design Service,WDS),是帮助您快速搭建企业网站的服务。通过自助模板建站工具及专业设计服务,无需了解代码技术,即可自由拖拽模块,可视化完成网站管理。全功能管理后台操作方便,一次更新,数据多端同步,省时省心。使用网站建设服务,您无需维持技术和设计师团队,即可快速实现网站上线,达到企业数字化转型的目的。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档