之前曾把 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.me
,www.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