一、前言

什么是重定向呢?

重定向是一个非常常用的功能,在 web 服务中,通常会通过重定向功能,将一个域名的请求转发到另一个域名上。

什么情况下用到重定向?

举例:假设你有一个域名为 aaa.com 网站, 但后面希望改版到 bbb.com 这个域名上,为了尽可能继承原网站的 SEO ,在新域名上线前期,需要将旧域名的流量全部汇聚到新域名的站点上来,此时就需要用到重定向功能了。

在原服务上设定重定向规则后,当原服务器收到外部的来访请求时,会根据你设定的重定向规则,将请求重定向到新服务器上。

继续上面的例子,当用户访问 http://aaa.com/index.html 时,源服务器会告诉来访用户,你要的资源在 http://bbb.com/index.html 服务器上,你去找它要吧,此时来访用户根据源服务器的通知,重新到新服务器去获取资源,这就完成了请求的重定向。

重定向类型?

常用的重定向类型有 301302 两种,本文主要介绍 301 跳转。

哪些服务器可以设置重定向?

常用的 Web 服务器都提供重定向功能,如 NginxApacheTomcat ,本文主要介绍 Nginx 的重定向配置使用。

二、重定向实例

下面通过 3 个简单的实例,介绍 Nginx 301 重定向的配置方法。

2.1 重定向请求到特定网址

下方示例演示:将域名 mydomain.com 的所有请求,重定向到特定的网址 http://anotherdomain.com/dir1/index.php 上。

server {
    listen 80;
    server_name mydomain.com;
    return 301 http://anotherdomain.com/dir1/index.php;
}

2.2 重定向请求其他域名

下方示例演示:将域名 mydomain.com 重定向到 anotherdomain.com 新域名上,但访问的资源路径不变。

具体效果:
源URL:http://mydomain.com/dir/1.jpg
重定向后的URL:http://anotherdomain.com/dir/1.jpg

server {
    listen 80;
    server_name mydomain.com;
    return 301 http://anotherdomain.com$request_uri;
}

2.3 将请求重定向到特定协议

使用 Nginx 的重定向功能时,除了可以重定向到新域名,还可以将请求重定向到特定的协议上。

你可以手动指定重定向到 httphttps 协议,也可通过 $scheme 参数继承用户来访时使用的协议类型。

如:在重定向域名时,继承用户来访时使用的协议类型。

server {
    listen 80;
    server_name mydomain.com;
    return 301 $scheme://anotherdomain.com$request_uri;
}

三、总结

  1. 指向的新域名,其后的 / 不需要填写。
  2. 重定向时也可以重定向到新的服务端口,在域名后已 :端口号 的方式添加即可。
  3. 301 & 302 跳转的区别 ?

    • 301 永久跳转,当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息中的状态码的一种,表示本网页永久性转移到另一个地址。
    • 302 临时跳转,也是状态码的一种,意义是暂时转向到另外一个网址。

四、思路拓展

上述实例的跳转影响范畴较大,其实我们还可以引入判断,将跳转控制在一个更灵活的维度上。

如:Nginx 上监听了多个域名的web服务,你可通过条件判断:

  1. 设定某些域名或其二级、三级域名资源跳转;
  2. 设定域名下仅特定的文件跳转(基于文件后缀);
  3. 设定域名下仅特定路径的资源跳转。

五、相关文章

https://www.cnblogs.com/crazylqy/p/6892010.html
https://m.jb51.net/article/79216.htm

最后修改:2021 年 06 月 13 日 11 : 28 AM