Netlify 可以在不强制使用 SSL 的情况下将流量从 http 重定向到 https

Can Netlify redirect traffic from http to https without forcing SSL

Netlify 社区经常问的另一个问题。 "Can Netlify redirect traffic from http to https without forcing SSL (TLS)?"

Once you have a certificate in place, you can check a box to force TLS. This will both set a redirect from http to https, and add Strict Transport Security headers to all requests.

用户不想强制使用 SSL,直到一切都正确设置并且他们知道他们不会更改他们的设置。

Netlify 允许您强制使用 TLS。建议不要 'force TLS',直到您确定所有 URL 都可以使用 https

Don’t check the ‘force TLS’ option until you are certain that all of your URL’s work with an ‘https://’ in front!

为什么?

一旦您使用 Netlify 强制使用 TLS,他们就会在您的页面响应 header 中设置 STS (Strict-Transport-Security) header。我不会通过解释但是 you can read about it here.

主要要了解的是:

Once a supported browser receives this header that browser will prevent any communications from being sent over HTTP to the specified domain and will instead send all communications over HTTPS

请注意,Netlify 的设置(使用强制 TLS 复选框)是为了让访问浏览器在过去的访问日期 1 年 内强制执行此设置!因此,如果您在 https 上有任何失败,您的网站将会出现一些问题,直到您能够修复它们。

等等!

您仍然希望您的站点在添加证书后始终提供 https 页面,但在测试或解决问题时不要强制它。

解决方案:

使用部署站点根目录下的 _redirects 文件(在“发布目录,index.html 旁边)将流量重定向到 https。

这是文件的示例

_redirects

# redirect netlify sitename to your sitename for SEO purposes,
# to avoid duplicate content.  Do this for http and https
https://example.netlify.com/* https://www.example.com/:splat 301!
http://example.netlify.com/* http://www.example.com/:splat 301!

# also redirect http to https for your custom domain.
# Note that netlify automatically redirects to your custom domain from the bare domain (or vice versa), so you only need one rule here.
http://www.example.com/* https://www.example.com/:splat 301!

或使用 Structured Redirects

的相同重定向

netlify.toml

[[redirects]]
  from = "https://example.netlify.com/*"
  to = "https://www.example.com/:splat"
  status = 301
  force = true

[[redirects]]
  from = "http://example.netlify.com/*"
  to = "http://www.example.com/:splat"
  status = 301
  force = true

[[redirects]]
  from = "http://www.example.com/*"
  to = "https://www.example.com/:splat"
  status = 301
  force = true

注意:

  • Netlify 已经将裸域重定向到 www 子域(可选)
  • 建议使用 www 作为您的自定义域,以通过 任何 DNS 设置充分利用 Netlify CDN。
  • 将 netlify 子域站点重定向到自定义域(可选)
  • 将所有路径的 http 重定向到 https

2018 年 11 月更新

已接受的答案不再正确

目前,截至 2018 年 11 月(自 2018 年 7 月起)Netlify 上的所有新站点都是 HTTPS 默认情况下启用强制重定向,您无法打开它关闭.

查看博客post:

以及 GitHub 上的这个问题:

即使对于旧站点,关闭 HTTPS 或关闭重定向到 HTTPS 的选项也不再可用: