【问题标题】:Set HTTPS for Symfony via .htaccess file通过 .htaccess 文件为 Symfony 设置 HTTPS
【发布时间】:2017-05-10 13:50:13
【问题描述】:

我需要基于 Symfony 为我的项目设置 HTTPS。 在根目录中,我有这个内容的 .htaccess,因为 web 根不是 web 目录。

RewriteEngine On
RewriteRule ^$ web/ [L]
RewriteRule (.*) web/$1 [L]

我需要在 .htaccess 文件(或 /web/.htaccess 文件)中设置什么来强制使用 HTTPS?

【问题讨论】:

  • 有数百万个示例将用户从 http 重定向到 https。为什么所有这些都没有回答您的问题?我们把你可以通过简单搜索找到的再写下来有什么意义?
  • " 在 .htaccess 文件中(或在 /web/.htaccess 文件中)" - 你有两个 .htaccess 文件?
  • @w3dk 是的,第一个在应用程序根目录中并重定向到 web 文件夹,第二个在 web 文件夹中,它是默认的 Symfony 文件。

标签: .htaccess symfony symfony-2.8


【解决方案1】:

在您的根.htaccess 文件之前 现有的重写尝试以下操作:

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

仅当您确定它工作正常时,才将R 更改为R=301

注意:这不会尝试进行域规范化(即 www 或非 www?)。在请求中使用的任何 host 都会在 substitution 中使用。


更新:为了帮助调试,请尝试以下操作(在注释掉上述内容后):

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^$ /?HTTPS=%{HTTPS}&SERVER_PORT=%{SERVER_PORT} [R,L]

并使用 HTTPS 协议访问文档根目录,即。 https://example.com/。 (希望这不会与您的 Symfony 应用程序冲突。) 您应该在地址栏中的 URL 上看到一个 /?HTTPS=on&SERVER_PORT=443 形式的查询字符串。你看到了什么?

【讨论】:

  • 您的 SSL 证书是如何实施的?它是安装在您的服务器上还是使用某种代理/CDN?此方法(使用HTTPS 服务器变量)假定它直接安装在您的应用程序服务器上。
  • 安装在服务器上。当我用 https:// 输入地址时,这很好。但是 http 没有重定向到 https。
  • 我添加了一些代码来帮助调试我的答案。尝试后你看到了什么?
  • 我看到 ?HTTPS=off&SERVER_PORT=80 (以 https 开头)。但是当我点击绿色锁时,证书名称(和信息)是正确的。
  • 在这种情况下,您必须使用某种代理来管理您的 SSL ???如果 HTTPS 为“关闭”且 SERVER_PORT 为 80,则您的应用程序正在通过 HTTP 提供响应。检查应用程序的请求标头,您看到X-Forwarded-ForX-Forwarded-Proto HTTP 请求标头吗?
猜你喜欢
  • 2018-06-09
  • 2017-10-12
  • 2011-01-09
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 2016-12-23
相关资源
最近更新 更多