2012-01-06 57 views
2

当用户访问包含用户配置文件,设置等表单的网站的“帐户”部分时,我想将用户重定向到SSL安全服务器。但是,不希望用户能够访问SSL服务器上的其他站点。由于我对模板进行了编码,因此我的路径设置为<a href="/about">作为示例。如果他们在“帐户”部分中,并单击“关于”部分的链接,它们仍将位于安全的https:连接上。很显然,我可以将链接硬编码链接到http://服务器,但我正在寻找替代方法。将SSL *仅*添加到特定文件夹

到目前为止,我在我的.htaccess中有以下内容,它正在工作,但我想知道这是否比这更需要资源密集型?硬链接到其他“非帐户”部分的链接会更好吗,还是通过.htaccess这样做来解决这个问题?

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteCond $1 ^(account) [NC] 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

RewriteCond %{HTTPS} on 
RewriteCond $1 ^(about|terms|products) [NC] 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

此外,如果我想阻止通过https访问主页://我将如何去添加到我的.htaccess文件?

回答

2

我实际上建议避免使用重写规则。

重写规则将http请求变成https请求的问题在于它们实际上是重定向。这意味着,对于要求变成https请求的每个http请求,浏览器首先要完整地请求http请求(包括内容,cookie,除安全请求之外),从服务器获取重定向代码,然后使请再次向https重新写入网址。

虽然这是方便,如果你靠这个,而不是确保旨在是https部分确实使用https您网站上的链接,这将使它很难检测到时,这些链接错误地重定向到http变体。

典型的后果是:

  • 混合内容警告,如果您嵌入使用http后挂自动,透明地变成https,这是一件坏事的东西;和
  • 可能泄漏的数据。

相反,我建议你不要使用中自动更新/重定向并确保是为了可通过HTTPS的部分仅仅是无法为所有的普通HTTP的变体(即http://yourhost/account应该返回404s):这至少会让你注意到你错误地链接了,并帮助你发现你的安全问题。最终,尽管它们共享相同的主机名,但http站点和https站点可以有两个不同的URL空间:在这种情况下它不是一件坏事。

我唯一看到从http改写为https的情况是非常有用的,那就是当您要确保用户对您网站的入口点被重定向时。

重写从httpshttp当然不会出现这个问题。

+0

感谢您的回答。我担心我会在重定向时加入太多的开销,这证实了它!我会确保我硬编码我的链接。 – Carlos 2012-01-07 00:22:39