仅使用.htaccess在某些页面上将http重写为https

时间:2010-03-01 16:54:05

标签: .htaccess mod-rewrite ssl https

我知道有很多关于我的问题的话题。我检查了所有并尝试了它们但无法使它工作。 我只需要在某些页面上将http重写为https。访问https页面后,URL将返回http。 这就是我到目前为止所做的:


# Rewrite Rules for domain.com
RewriteEngine On
RewriteBase /

#Rewrite www to domain.com
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]

#Rewrite to https
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} /secure.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]

#traffic to http://, except secure.php
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} /secure.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]

当我跳过最后一组规则(流量到http://,secure.php除外)时,secure.php页面加载为https并加密。精细。使用最后一组规则(流量到http://,除了secure.php),URL重写为https,变为蓝色(SSL)一秒钟并消失(无SSL),但URL仍为https。

有什么想法吗? 亚切克

1 个答案:

答案 0 :(得分:4)

第3套规则有误。 这是解决方案:使用第3组规则:如果https为“on”,那么如果URL不包含“/ secure”,则重定向到http。

# Rewrite Rules for domain.com
RewriteEngine On
RewriteBase /

#Rewrite www to domain.com
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]

#Rewrite to https
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} /secure.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]

#traffic to http://, except secure.php
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !(/secure.php)
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L]

非主题建议:请查看Yahoo Slow他们对网站优化的非常聪明的建议,你会明白为什么以前拥有“www”总是更好。你最好为你的#1重写规则做相反的事情:如果没有“www”,那就添加它。


请尝试使用RewriteLog指令:它可以帮助您找出此类问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

告诉我它是否有效。