nginx实现301跳转到https的根域名


需要将以下地址都统一跳转到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;
}
  • 301302的区别

301是永久重定向,302是临时跳转,主要的区别在于搜索引擎对此的对待方式

301:搜索引擎会将权重和 PR 值进行转移
302:搜索引擎不会进行额外处理

  • returnrewrite

都属于 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;
}

文章作者: darebeat
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 darebeat !
  目录