首页 > 解决方案 > 如何强制 Heroku PHP 应用使用 SSL 证书(https)?

问题描述

我试图强制我的 heroku web 应用程序使用 heroku 提供的自动证书。我需要强制我的所有链接都使用 https。所以我添加了几行:

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

到 htaccess 文件,但现在我收到错误“此页面无法正常工作,重定向太多”。我在我的 htaccess 文件中放入什么来强制 https?我发现的每个在线人都使用这个,但如果我删除我的其他规则,我的网站将无法加载。

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews -Indexes
</IfModule>

RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

标签: apache.htaccesssslherokumod-rewrite

解决方案


我发现网上的每个人都使用这个

那是使用 Heroku 的“每个人”吗?

我相信 Heroku 使用反向代理来管理 SSL 证书,因此您不能使用 ApacheHTTPS服务器变量,因为您的应用程序实际上是通过纯 HTTP 与代理进行通信。

请尝试以下操作:

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

反向代理设置X-Forwarded-ProtoHTTP 请求标头,通知应用程序客户端向代理发出的请求类型。

您需要在测试前清除浏览器缓存。


推荐阅读