基于搜索引擎优化和安全性的考量,需要进行301跳转,以下使用Nginx作通用处理
<>强实现结果强>需要将以下地址都统一跳转到https的根域名
https://chanvinxiao.com http://chanvinxiao.com (不带,www 的,http) http://www.chanvinxiao.com (带,www 的,http) https://www.chanvinxiao.com (带,www 的,https)<强> 301年与302年的区别强>
301是永久重定向,302是临时跳转,主要的区别在于搜索引擎对此的对待方式
301:搜索引擎会将权重和PR值进行转移
302年
:搜索引擎不会进行额外处理
现在是希望搜索引擎认为原地址已经不存在了,完全转移到新地址,所以使用301
最简单的方法是直接在服务器中返回一个重定向的地址,中间再加301上状态码(否则默认为302)
<>以前server { ,listen 80; ,return 301, https://主机request_uri美元; }返回和重写都属于Nginx的重写模块的指令,因为这里不需要对路径进行修改,所以用回报会比较方便
主机和request_uri美元都是Nginx http模块的嵌入变量,两个变量合并一起就相当于把请求的http://去掉的结果
这个只需在https中作处理,因为所有http都跳转到https了
<>以前server { ,listen 443年,ssl; ,server_name ~ ^ (www \) ? (+); www 美元,if (,,), { ,return 301, https://$ 2 $ request_uri; ,} …这里利用了server_name的正则匹配功能,在其值前增加~即可启用,支持PCRE语法
使用正则是为了确认是否有前缀www。以及捕获根域名,生成两个变量,一个是具名捕获变量www美元,另一个是数值捕获变量2美元
如果里面不支持使用次序捕获变量,否则会报错(未知的“1”;变量),所以增加了?,将1美元的值赋给了www
减少跳转次数
以上设置已经满足了实现结果,但是有一点瑕疵,就是http://www.chanvinxiao.com会先跳转到https://www.chanvinxiao.com,再跳转到https://chanvinxiao.com,进行二次跳转肯定是不如只需跳转一次的,所以最好让其直接一步到位,修改http的配置如下:
<>以前server { ,listen 80; ,server_name ~ ^ (?: www \) ? (+); ,return 301, https://$ 1 $ request_uri; }在http对应的服务器中,把server_name也改为正则模式,并将主机用美元捕获的根域名1美元取代
www在这里会直接弃掉,所以不需要捕获,使用?:标示实现只分组不捕获,于是后面的根域名就成了1美元
这样的结果是不管原来是否带www,都统一跳转到不带www的https根域名
以上配置中不需指定特定域名,可方便兼容和移植,使用了Nginx的以下特性:
<>以前server_name 的正则匹配 return 指令接收状态码和地址 美元和美元host request_uri 嵌入变量到此这篇关于使用Nginx实现301跳转至https的根域名的文章就介绍到这了,更多相关Nginx 301跳转至https根域名内容请搜索 脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
原文来自: https://www.linuxprobe.com/nginx - 301 https.html
引用>Nginx实现301跳转至https的根域名展示