之前曾把 blog.wenjinyu.me 作为博客域名,后来由于需要申请google adsense,需要把www.wenjinyu.me作为博客域名,所以根域名设置了301跳转,在.conf中设置if语句即可。不过,在改变域名的同时,也有一大批网址需要更改,因为我把博客框架从wordpress换成了hexo,而且之前很多文章的网址直接用中文生成网址,看起来一团乱麻,现在改成了直观的英文网址,例如《win10简单脚本一步卸载Cortana》这篇文章,之前的网址是

1https://blog.wenjinyu.me/win10%E5%85%B3%E9%97%ADcortana/

而现在是

1https://www.wenjinyu.me/zh/an-easy-step-to-uninstall-cortana-in-win10/

所以网址的处理现在成了大问题。

在此必须说一句,**频繁改网址对网站来说时大忌!**刚建站的博主一定要重视网址,这是建站需要研究的基本功。

需要知道的一点是,改网址并没有那么简单,因为网址是别人找到你的网站的基本途径,经营了那么久好不容易把搜索排名挤上去,如果突然改掉网址,那么搜索引擎只会认为这个网站消失了,然后把更改后的网址作为一个新网站,说白了就是之前的努力都白费了,网站又要从头做起,所以才需要域名跳转。

我这次网址跳转最麻烦的地方就是需要跳转的网页数量太多了,直接写进.conf配置文件难管理且不美观,在网上找了一遍,教程基本都是首页跳转,或者域名跳转,但是对于网站内批量网址的跳转却很少见。后来发现,其实nginx里面的map指令就是专门用来做批量跳转的,只要加一个所有网址的跳转规则,然后在每个站点的配置文件加个引用规则的语句就行了。

配置nginx.conf

nginx的配置文件是/etc/nginx/nginx.conf/etc/nginx/conf.d/目录下的所有以.conf结尾的文件,原则上是可以把所有配置内容都写进nginx.conf这一个配置文件的,但是为了方便管理,我习惯把每个二级域名(例如wenjinyu.mewww.wenjinyu.me)的配置文件都写在各自的配置文件里,然后放到/etc/nginx/conf.d/目录下,通用的配置内容就放在/etc/nginx/nginx.conf,也建议每个新手都这么做,这样方便管理。

编辑配置文件:

1vim /etc/nginx/nginx.conf

http域中添加以下内容:

1map $request_uri $new {
2 include /etc/nginx/redirect.map;
3}

添加完大概是这个样子:

 1...
 2http {
 3    include       /etc/nginx/mime.types;
 4    default_type  application/octet-stream;
 5    client_max_body_size    100m;
 6    map $request_uri $new {                 # 添加在这里
 7        include /etc/nginx/redirect.map;
 8    }
 9    ...
10}

这样就会引用/etc/nginx/redirect.map作为映射规则文件。

添加映射规则

上面添加的配置内容已经提到,批量跳转的映射规则会放在/etc/nginx/redirect.map文件中,所以需要新建一个包含映射规则的redirect.map文件:

1vim /etc/nginx/redirect.map

然后添加规则,规则的写法是:

~^ + 原地址 + 空格 + 新地址 + ;

注意:

  • 每个地址开头要加上斜杠
  • 每一行末尾要加上分号
  • 不用写根域名,只需要写后面网址后面的参数。

例如原网址:https://blog.wenjinyu.me/win10%E5%85%B3%E9%97%ADcortana/

需要跳转到:https://www.wenjinyu.me/zh/an-easy-step-to-uninstall-cortana-in-win10/

则写入这样的规则

1~^/win10%E5%85%B3%E9%97%ADcortana/ /zh/an-easy-step-to-uninstall-cortana-in-win10/;

添加跳转规则

有了映射规则,就需要在站点配置文件启用映射规则,之后原网址就会按照规则跳转

1# 编辑配置文件
2vim /etc/nginx/conf.d/配置文件.conf

添加跳转规则

1if ($new){
2    return 301 https://www.wenjnyu.me$request_uri;
3}

return 301是301永久跳转,也就是告诉搜索引擎:这个网址永久迁移到后面的新网址。

最后重启nginx即可。

1systemctl restart nginx