mod_rewrite:仅一页的HTTPS

时间:2013-11-13 09:25:25

标签: apache .htaccess mod-rewrite https redirect

我想重定向到仅HTTPS /登录页面。其余页面需要是HTTP。

.htaccess文件如下所示:

RewriteEngine On

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

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} /login
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !/login
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

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

我不知道为什么它不起作用。当我去/登录时,我被重定向到example.com/index.php 怎么了?

2 个答案:

答案 0 :(得分:0)

目录中是否有实际(物理)/login文件夹或文件?我想不是,所以你的/login请求最终被最后一次重写规则捕获并重定向到index.php。

尝试在此行上方添加此RewriteCond %{REQUEST_URI} !/loginRewriteCond %{REQUEST_FILENAME} !-f(或者只是以不同的方式处理登录请求)

答案 1 :(得分:0)

尝试在上一个规则中添加L标记,并将代码添加为:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ http://example.com%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} /login [NC]
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !/login [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

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