apache - 如何强制 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]
解决方案
我发现网上的每个人都使用这个
那是使用 Heroku 的“每个人”吗?
我相信 Heroku 使用反向代理来管理 SSL 证书,因此您不能使用 ApacheHTTPS
服务器变量,因为您的应用程序实际上是通过纯 HTTP 与代理进行通信。
请尝试以下操作:
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
反向代理设置X-Forwarded-Proto
HTTP 请求标头,通知应用程序客户端向代理发出的请求类型。
您需要在测试前清除浏览器缓存。
推荐阅读
- javascript - 测试要匹配的特定数量的单词,在 Js 中使用带有正则表达式的已知分隔符
- python - “ValueError:预期,分隔符:第 10 行第 11 列(字符 357)”
- java - Log4j 中的字符串连接性能
- collections - 将 int 列表折叠到 kotlin 中的范围列表
- swift - 如何将函数返回到标签 StringValue
- html - 悬停时的 CSS 下拉菜单
- r - 如何通过点是否在多边形内来标记点
- reactjs - 开玩笑:为什么它会因 TypeError 失败:路径必须是字符串。收到未定义
- javascript - django html模板中的JS脚本
- bitbucket - 适用于所有存储库的 admin bitbucket post hooks 插件