1

我想重定向到 HTTPS only /login 页面。其余页面需要是 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

我不知道为什么它不起作用。当我转到 /login 时,我被重定向到 example.com/index.php 出了什么问题?

4

2 回答 2

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]
于 2013-11-13T12:53:49.237 回答
0

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

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

于 2013-11-13T11:49:57.980 回答