【问题标题】:How to forward to https with htaccess without redirect loops如何在没有重定向循环的情况下使用 htaccess 转发到 https
【发布时间】:2016-01-20 20:04:33
【问题描述】:

我的 htaccess 文件如下所示:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php\?p=$1 [QSA,L]
</IfModule>

我想添加一条规则,让访问该站点的用户使用 https。我添加了这段代码(就在结束 IfModule 标记之前)并获得了一个重定向循环:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

如何调整我的文件以消除任何不必要的重定向?

【问题讨论】:

  • 是的,它是一个论坛。我添加的第一部分是为了让 URL 更“干净”,效果很好。
  • 您的 Apache 版本是多少? Apache前面有代理吗?
  • 它是使用 Apache 2.2.31-2 并为域启用 Cloudflare 的共享主机。我认为没有代理。

标签: .htaccess redirect ssl https


【解决方案1】:

试试这个 .htaccess:

RewriteEngine On
RewriteBase /f/

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

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]

http-&gt;https 的等效 PHP 代码:

if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] != 'https'){
    header("Location: https://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]);
    exit;
}

【讨论】:

  • 谢谢,这似乎可行,但是我在加载一些资源时遇到了问题。我检查了软件,它有一个使用这条线作为 https 的规定。有没有办法将您的方法转换为 php 中的标头? header("位置:https://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]);
  • 实际上是一样的。
  • 如果我在 php 中使用该标头,我也会得到重定向循环。有没有办法可以转换并将您的行“RewriteCond %{HTTP:X-Forwarded-Proto} !https”添加到 php 标头?
  • 我不是 PHP 程序员,但我建议了一些 PHP 代码来解决该重定向
  • 这成功了!非常感谢,你是大师和蜜蜂的膝盖!
猜你喜欢
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 2017-04-17
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
相关资源
最近更新 更多