使用.htaccess在HTTP和HTTPS之间正确切换

时间:2009-07-10 09:56:41

标签: http .htaccess ssl https

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

有谁知道我们如何能够始终强制正确使用特定URL的HTTP / HTTPS?我们已经让它在各种状态下工作,但是我们无法获得应该在HTTP上的页面的请求,但是请求使用HTTPS来正确切换回来。

我已经看了一眼,但找不到合适的答案。

6 个答案:

答案 0 :(得分:35)

我在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服务器。例如,我的webhost需要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

答案 1 :(得分:15)

这应该适用于几乎所有场景,并且应该在您的实际vhost或.htaccess中工作:

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

(不要忘记%{REQUEST_URI}之前的斜杠,因为这可能允许传递一个portnumber,这很危险)

答案 2 :(得分:6)

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

我遇到了一个负责人的问题。这是我如何解决它。

答案 3 :(得分:1)

this answer中所述,请在需要时修复您的应用以使用https://链接。不要依赖自动重定向,如果您没有通过https://提供的链接/表单转到https://网址,这可能会导致错误的安全感。使用mod_rewrite会自动更难以发现此类错误(也可能是漏洞)。

答案 4 :(得分: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,但没有成功。

答案 5 :(得分:0)

我认为应该是:

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

请参阅mod_rewrite文档。