将一个网址重定向到https,将所有其他网址重定向到http

时间:2017-08-22 14:15:28

标签: apache .htaccess url-redirection

我正在尝试将一个网址重定向到https,将所有其他网址重定向到http 例如:如果我想访问example.com的登录页面,它应该重定向到https://example.com/login 如果我想访问登录以外的任何页面,则应将其重定向到http://example.com/any-other-page。 当前.htaccess代码:

RewriteEngine on
RewriteCond %{HTTPS} =on
RewriteRule !^(login) http://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]
DirectoryIndex index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

这很好用。登录以外的所有URL都重定向到http。 但是,如果我添加以下代码来重定向登录页面,它将被重定向到index.php

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

我想要的只是登录页面应重定向到https。但这种情况并没有发生。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用.htaccess文件中的以下规则执行此操作:

RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteCond %{REQUEST_URI} ^\/(login)
RewriteRule (.*) https://%{HTTP_HOST}/$1 [L,R=301]

RewriteCond %{HTTP:X-Forwarded-SSL} =on
RewriteCond %{REQUEST_URI} !^\/(login)
RewriteRule (.*) http://%{HTTP_HOST}/$1 [L,R=301]

第一组规则检查是关闭目录/login/的HTTP关闭,如果关闭,则会强制它到HTTPs。

第二组规则检查HTTP是否打开,如果打开,则会关闭除/login/目录之外的所有内容。

确保在> 之前清除缓存

注:

我不确定为什么你不希望所有内容都成为HTTP?...它会使一个更安全的网站,并允许你使用HSTS。