1

我的托管服务提供商让他们的 SSL 请求通过代理,我想通过 .htaccess 文件强制 https,但 SSL 没有在 443 上侦听,所以通过端口、https 或在 .htaccess 中要求 ssl不工作。

我一直在尝试找到一种通过.htaccess 查找和替换的方法。例如,.htaccess 将搜索“http://”并根据用户所在的 URL 将所有出现的“http://”替换为“https://”,最终强制建立安全连接。到目前为止,我还没有找到使用 .htaccess 执行此操作的方法,因此我们将不胜感激。

我知道我可以使用 JavaScript 完成此操作,并且使用 PHP 也可以完成此操作,但我真的想通过 .htaccess 完成此操作。谢谢!

4

2 回答 2

1
RewriteEngine On 
#if it is a regular http request
RewriteCond %{HTTPS} !=on
#rewrite every page to https version
RewriteRule ^(.*)$ https://www.yoursitenamehere.com/$1 [R,L]
于 2013-03-08T02:03:19.417 回答
0

在“普通”HTTP 中你不能。对不起。

一个正常的请求看起来像这样:

GET / HTTP/1.1
Host: www.example.com

无论是 HTTP 还是 HTTPS,这看起来都完全相同(Host标头可以有一个端口号,但默认端口通常会省略它)。

还有一种替代语法,(我怀疑)源自 HTTP 代理服务器:

GET http://www.example.com/ HTTP/1.1

一些 Web 服务器支持第二种语法(Apache 支持;我没有测试过其他语法),但客户端不会使用第二种语法,除非他们正在与 HTTP 代理通信。有时我会考虑过滤使用第二种语法的请求,因为它们可能是试图找到一个开放的代理。

有几个简单的选择:

  • 将 SSL 转发到其他端口。
  • 在网络服务器上启用 SSL。

后者并不太棘手(如果你想在不同的证书上使用它,你可以使用 StartSSL 或滚动你自己的 CA),你可以选择一个低开销的密码套件(例如 RC4)

于 2013-03-08T02:55:32.937 回答