需要将以下地址都统一跳转到https的根域名: https://darebeat.cn。
http://darebeat.cn (不带 www 的 http)
http://www.darebeat.cn (带 www 的 http)
https://www.darebeat.cn (带 www 的 https)
http 跳转到 https
server {
listen 80;
return 301 https://$host$request_uri;
}
301
与302
的区别
301
是永久重定向,302
是临时跳转,主要的区别在于搜索引擎对此的对待方式
301
:搜索引擎会将权重和 PR 值进行转移302
:搜索引擎不会进行额外处理
return
和rewrite
都属于 Nginx 的重写模块的指令,因为这里不需要对路径进行修改,所以用return
会比较方便$host
和$request_uri
都是 Nginx http 模块的嵌入变量
www 跳转到根域名
这个只需在 https 中作处理,因为所有 http 都跳转到 https 了
server {
listen 443 ssl;
# ? 将 $1 的值赋给了 $www
server_name ~^(?www\.)?(.+)$;
if ( $www ) {
return 301 https://$2$request_uri;
}
# ...
}
减少跳转次数
以上设置已经满足了实现结果,但是有一点瑕疵,就是 http://www.darebeat.cn 会先跳转到 https://www.darebeat.cn, 再跳转到 https://darebeat.cn ,进行二次跳转肯定是不如只需跳转一次的,所以最好让其直接一步到位
最终代码
server {
listen 80;
# 使用 ?: 标示实现只分组不捕获
server_name ~^(?:www\.)?(.+)$;
return 301 https://$1$request_uri;
}