2013-03-08 55 views
1

我的托管服务提供商有他们的SSL请求通过代理,我想通过.htaccess文件强制https,但SSL不在443上进行监听,所以通过端口,https ,或者在.htaccess中要求ssl不起作用。.htaccess找到并替换

我一直在试图找到一种方法来查找和替换通过.htaccess。例如,.htaccess会搜索“http://”,并根据该用户所在的URL将“http://”替换为“https://”,最终强制进行安全连接。到目前为止,我还没有找到一种方法来与.htaccess做到这一点,所以任何帮助将不胜感激。

我知道我可以用JavaScript来实现这一点,也可以使用PHP,但我真的想通过.htaccess来完成。谢谢!

回答

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] 
+0

每个请求都将在端口80上(因为它通过代理服务器,SSL和http请求最终在端口80上服务),所以上述方法将不起作用。 : -/ – 2013-03-08 02:06:49

+0

编辑以检查https是否不在。 – 2013-03-08 02:12:10

+0

它仍然以无尽的重定向结束,因为服务器由于代理服务器而未启用SSL。我试图找到一种方法来实现,它将逐字搜索“http://”并将其替换为URL中的“https://”。不过谢谢,我很欣赏它。 :) – 2013-03-08 02:16:14

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)

+0

感谢您的提示;不幸的是,我被绑定到一个特定的共享Web主机,所以我不控制服务器配置。 :-( – 2013-03-08 03:29:33