我知道有很多关于我的问题的话题。我检查了所有并尝试了它们但无法使它工作。 我只需要在某些页面上将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。
有什么想法吗? 亚切克
答案 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
告诉我它是否有效。