htaccess的 - 重定向到HTTPS不工作

问题描述:

每页:https://exp-resso.com/blog/post/2011/08/securing-your-expressionengine-website-with-httpshtaccess的 - 重定向到HTTPS不工作

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteCond $1 ^(member|account|checkout|system) [NC] 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

这告诉你的服务器“如果HTTPS是关闭的,并请求与 成员或账户或结算或系统启动(不区分大小写) ,将 重定向到https://current-domain/current-page“。这是一个很好的简单的方法 锁定整个子文件夹/模板组。

我已经添加到了我的htaccess文件是这样的:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTPS} off 
    RewriteCond $1 ^(sign-in|sign-up) [NC] 
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
</IfModule> 

然而,当我去我http://mydomain.com/sign-in,该URL不会更改为https://mydomain.com/sign-in。任何想法有什么不对?

编辑1:

我的htaccess还具有以下(删除“WWW”),我不知道是否有两个可能导致该问题?

RewriteCond %{HTTPS} !=on 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule^http://%1%{REQUEST_URI} [R=301,L] 

编辑2:消除

过程,事实证明,这是造成问题的原因:

<IfModule mod_rewrite.c> 
     RewriteEngine On 

     # Removes index.php from ExpressionEngine URLs 
     RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteRule ^(.*)$ /index.php/$1 [L] 
</IfModule> 

当我注释掉重写规则,将https://开头的力量。 什么导致冲突?

+0

任何原因,你用'.htaccess'样式文件而不是正常的配置?这些文件容易出错,使所有的东西都慢下来,很难调试。 – arkascha

试图把(登录|注册)的条件内重写规则:

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule ^(sign-in|sign-up)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,NC,R=301] 
+0

这没有奏效。 – *Newbie

+0

@*Newbie你确定,mod_rewrite是开启的吗?有没有重定向工作? – user4035

+0

@*Newbie我在这里测试它:http://htaccess.madewithlove.be/,它的工作。 – user4035

这是怎么回事? (如果端口== 80然后重定向)

RewriteEngine on 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} member [OR] 
RewriteCond %{REQUEST_URI} account [OR] 
RewriteCond %{REQUEST_URI} checkout [OR] 
RewriteCond %{REQUEST_URI} system 
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] 
+0

'RewriteEngine On'是否必要?我只是复制'RewriteRule'上方的'RewriteCond $ 1 ^(会员|帐户|结帐|系统)[NC]'? – *Newbie

+0

是的,应该是。 (我刚刚编辑我的评论) –

+0

它没有工作 – *Newbie

首先确保重写工作在服务器上,并且读取htaccess(例如,通过在每个URL上发出重定向)。

然后使用RewriteCond %{REQUEST_URI} ^/(sign-in|sign-up)代替RewriteCond $1 ^(sign-in|sign-up) [NC]

它的工作原理,并更容易阅读过

所以,你的htaccess应该是这样的

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteCond %{REQUEST_URI} ^/(sign-in|sign-up) [NC] 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]