2014-09-24 40 views
1

我需要将所有请求重定向到https,并且如果使用https访问,那么应该重定向到http。此外,我需要标准的PHP重写,所以在index.php的所有土地。重定向到https很容易。 我可以使其工作单向https - > http,但如果我取消注释这些行,我将被重定向 从http://example.com/byehttps://example.com/index.php。我错过了什么?.htaccess将所有http重定向到https和另一种方式

Options +FollowSymLinks 
IndexIgnore */* 
RewriteEngine on 

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} ^/bye$ 
RewriteRule^http://%{HTTP_HOST}%{REQUEST_URI} [L] 

#RewriteCond %{HTTPS} off 
#RewriteCond %{REQUEST_URI} !^/bye$ 
#RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php 

回答

0

您需要通过您的最后一个规则来使用THE_REQUEST变量,而不是因为REQUEST_URI变量的变化/index.php

Options +FollowSymLinks 
IndexIgnore */* 
RewriteEngine on 

RewriteCond %{HTTPS} on 
RewriteCond %{THE_REQUEST} \s/+bye/?[?\s] 
RewriteRule^http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

RewriteCond %{HTTPS} off 
RewriteCond %{THE_REQUEST} !\s/+bye/?[?\s] 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php 
+0

谢谢,但还是如果键入https://example.com/bye我不会重定向到http://example.com/bye – Kubber 2014-09-24 15:51:38

+0

这是由于您的浏览器缓存。在新的浏览器中测试或清除浏览器缓存。 – anubhava 2014-09-24 15:52:46

+0

不,在3种不同的浏览器上测试,缓存清除...。当然我没有注意到这个规则.. – Kubber 2014-09-24 16:36:26

相关问题