2009-07-10 122 views
19

我们有一个购物网站,我们在共享主机(Mediatemple Gridserver)上托管。网站的某些部分需要使用HTTPS(结帐等),但其余部分应使用HTTP。正确使用.htaccess在HTTP和HTTPS之间切换

有谁知道我们总是可以强制正确使用特定URL的HTTP/HTTPS吗?我们已经在各种状态下工作,但是我们无法获得对应该位于HTTP上但通过HTTPS请求正确切换回的页面的请求。

我看了一下SO,但找不到合适的答案。

+0

是否必须与htaccess的?是什么语言使用? – random 2009-07-15 02:33:04

+0

你想防止与HTTPS? – 2012-01-19 18:34:56

回答

33

我用类似这样的我的管理文件夹的东西在WordPress:

#redirect all https traffic to http, unless it is pointed at /checkout 
RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^/checkout/?.*$ 
RewriteRule ^(.*)$ http://mydomain.com/$1 [R=301,L] 

RewriteCond %{HTTPS} on部分可能不适用于所有的Web服务器上运行。例如,我的虚拟主机需要RewriteCond %{HTTP:X-Forwarded-SSL} on

如果要强制相反,尝试:

#redirect all http traffic to https, if it is pointed at /checkout 
RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} ^/checkout/?.*$ 
RewriteRule ^(.*)$ https://mydomain.com/$1 [R=301,L] 

如果你想一些替代的方法来做到这一点,看看askapache

+0

我检查了代码的网站我服务器,使用上面列出的两个块,并且它工作正常,没有重定向循环 – 2009-07-20 19:21:25

+0

+1。很好的回答。我的情况需要'RewriteCond%{HTTP:X-Forwarded-SSL} on`,因为我使用RackSpace的云站点。 – 2011-08-15 00:19:26

0

我觉得应该是:

RewriteCond %{HTTPS} =on 
^/checkout(.*) http://shoppingsite.com/checkout$1 [R] 

mod_rewrite文档。

13

这应该工作在几乎所有情况,并应在实际的虚拟主机或工作的.htaccess:

RewriteEngine on 
RewriteCond %{SERVER_PORT} ^80$ 
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [R=301,L] 

(不要忘记%{REQUEST_URI}前斜线,因为这可以使传递一个端口号,这是危险的)

1

如在this answer中所述,修复您的应用程序以在需要时使用https://链接。不要依靠自动重定向,如果您还没有将您的链接/表单也通过https://转到https://网址,这可能会导致您错误的安全感。使用mod_rewrite会自动更难以检测到这种错误(这也可能是漏洞)。

5
RewriteEngine on 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [R=301,L] 

我有一个问题是在一个loadballancer后面。这是我如何修复它。

1

对我来说,这工作(我用它的WordPress站点和重定向到HTTPS)。你必须的条件和规则行添加仅次于RewriteEngine叙述和RewriteBase线:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

# I added these two lines for redirect to HTTPS 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [R=301,L] 
# (end of custom modifications) 

RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
# END WordPress` 

看一看调理RewriteCond %{HTTP:X-Forwarded-Proto} !https - 只有这个工作对我的服务器托管。 (我试过RewriteCond %{SERVER_PORT} !^443$RewriteCond %{HTTPS} off为好,但没有成功。

相关问题