【问题标题】:Redirect HTTP > HTTPS when port is always 80当端口始终为 80 时重定向 HTTP > HTTPS
【发布时间】:2016-11-10 01:18:17
【问题描述】:

我们的应用程序需要将HTTP 请求重定向到HTTPS。 通常我会使用RewriteCond,如下所示。

RewriteCond %{HTTPS} off

我们目前的托管公司的问题是,请求的端口始终是 80。无论我们发送 HTTP 还是 HTTPS 请求,$_SERVER['SERVER_PORT'] 始终是 80。

我们可以在PHP 处理这个问题,但我们也想强制文件到HTTPS

所以具体的问题。无论如何要在.htaccess 中强制HTTPS 而不使用RewriteCondRewriteCond %{HTTPS}RewriteCond %{SERVER_PORT}

【问题讨论】:

  • 您是否在使用 SSL 终止代理...?该代理是否发送任何指示性 HTTP 标头通知您使用的协议...?
  • 您已指定条件,但未指定适用于该条件的规则。
  • @deceze 非常好的问题。我想这可能是我们的问题。我认为服务器在代理后面。我在HTTP 响应中可以找到的唯一区别是$_SERVER['HTTP_ACCEPT_ENCODING'] 不同。 HTTPS 请求添加值 br。但我不知道这意味着什么,以及是否与此有关。
  • 您应该与您的主机核实如何检测 HTTPS。除非代理转发该信息,或留下其他特定痕迹,否则这是不可行的。
  • @S.Pols:RewriteCond %{HTTP:X-Forwarded-SSL} =off 适合你吗?

标签: php .htaccess http https url-rewriting


【解决方案1】:

您的情况并不少见。试试这个(X-Forwarded-Proto 是识别 HTTP 请求的发起协议的事实标准):

RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

【讨论】:

  • 感谢您的回答,但不幸的是这也会触发无限循环。
  • 我使用 cloudflare 是其他解决方案不起作用的原因吗?
  • 是的,如果 ssl/tls 未在 web 服务器上终止,但在中间反向代理(或负载平衡器或 CDN)上终止,这是必要的
猜你喜欢
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
相关资源
最近更新 更多