【问题标题】:Using .htaccess to redirect http to https - causing ERR_TOO_MANY_REDIRECTS using lets-proxy使用 .htaccess 将 http 重定向到 https - 使用 let-proxy 导致 ERR_TOO_MANY_REDIRECTS
【发布时间】:2020-11-09 19:19:06
【问题描述】:

我使用一个名为lets-proxy2 (https://github.com/rekby/lets-proxy2) 的服务来自动从Let's Encrypt 获取和更新证书。

这很好用,但是当尝试在 .htaccess 文件中将 http 重定向到 https 时,我得到一个无限重定向循环,它在浏览器中抛出错误 ERR_TOO_MANY_REDIRECTS。

我尝试了几种不同的 RewriteConds 和 RewriteRules,但都遇到了同样的问题。

我正在使用的当前 .htaccess 文件是:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTP:X-FORWARDED-PROTO} !(^.+)
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]
</IfModule>

我需要强制 https 以确保所有 http 流量都重定向到 https,但是目前尝试使用 .htaccess 文件将无法正常工作。

任何帮助将不胜感激。

【问题讨论】:

  • 尝试清除浏览器的缓存。并检查。
  • 同时将RewriteCond %{HTTP:X-FORWARDED-PROTO} !(^.+)更改为RewriteCond %{HTTPS} !on
  • 我看到那里已经创建了一个关于此的问题github.com/rekby/lets-proxy2/issues/140
  • 您可以使用 certbot 代替lets-proxy。它还会自动更新您的证书。
  • 我尝试清除 cookie 和缓存,但没有成功。我还尝试了更新的 .htaccess 文件规则 - 它仍在创建无限循环。

标签: apache .htaccess ubuntu https lets-encrypt


【解决方案1】:

lets-proxy2 的作者实际上已经在这里发布了解决问题的修复程序 - https://github.com/rekby/lets-proxy2/issues/140。

没有设置默认标题,所以它只是以无限循环结束。

【讨论】:

  • 感谢您的更新。但是,您在上面发布的规则/条件 (%{HTTP:X-FORWARDED-PROTO} !(^.+)) - 您说您在 v1 中需要 - 并没有真正意义。仅当X-Forwarded-Proto 标头为空(或未设置)时,该条件才成功(即发生重定向)。如果代理服务器完全设置了 X-Forwarded-Proto 标头,那么它从不为空(或者它不应该是)-因此重定向永远不会发生。如果未设置标头,那么您将获得一个重定向循环(因为没有理由在重定向请求上设置它)。
  • ...除非代理使用非常非标准的实现并且仅在 HTTPS 请求上设置标头?但这绝对是不正确的——但这是上述规则按预期“工作”的唯一方式。正则表达式/CondPattern !(^.+) 也过于“复杂/低效”。这与简单的 !. 或 ^$ 相同 - 因为您只是在测试它是否为 空。
  • lets-proxy vs 1 中不需要该规则,但我们使用它来强制使用 https。这导致了lets-proxy vs 2中的无限循环。该软件的作者说这是因为它没有设置默认标头(vs 1做了)。
猜你喜欢
  • 2019-03-18
  • 2012-10-11
  • 2015-11-10
  • 2018-08-31
  • 2015-02-16
  • 2015-12-06
  • 2018-02-02
  • 2014-03-30
  • 1970-01-01
相关资源
最近更新 更多