.htaccess找到并替换

时间:2013-03-08 01:59:01

标签: .htaccess

我的托管服务提供商的SSL请求通过代理,我想通过.htaccess文件强制https,但SSL没有监听443,所以通过端口,https on或要求ssl来执行.htaccess无效。

我一直试图找到一种通过.htaccess查找和替换的方法。例如,.htaccess将搜索“http://”并根据此人所在的URL将所有出现的“http://”替换为“https://”,最终强制建立安全连接。到目前为止,我还没有找到办法用.htaccess做到这一点,所以任何帮助都会受到赞赏。

我知道我可以用JavaScript实现这一点,并且它也可以用PHP实现,但我真的想通过.htaccess完成这项工作。谢谢!

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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)