Php 有条件地将页面从http重定向到https或从https重定向到http
我试图编辑我的Php 有条件地将页面从http重定向到https或从https重定向到http,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我试图编辑我的.htaccess文件,以便让用户通过SSL连接访问某些页面,而不是其他页面 例如,当访问名为login.php(有时是login.php?lo=true)的页面时,他们会在其登录详细信息中输入。在他们访问login.php之后,他们继续进行检查\u login.php,如果成功,他们将转到index.php 我的问题是:如何更改我的.htaccess文件,以便发生以下情况: http://www.site.com/login.php-->https://www.site.com
.htaccess
文件,以便让用户通过SSL连接访问某些页面,而不是其他页面
例如,当访问名为login.php
(有时是login.php?lo=true
)的页面时,他们会在其登录详细信息中输入。在他们访问login.php
之后,他们继续进行检查\u login.php
,如果成功,他们将转到index.php
我的问题是:如何更改我的.htaccess
文件,以便发生以下情况:
-->http://www.site.com/login.php
如果存在变量,如https://www.site.com/login.php
lo=true
-->http://www.site.com/check_login.php
https://www.site.com/check_login.php
- 任何其他非login.php的页面,或选中\u login.php,使其仅为
,而非http
https
RewriteCond %{HTTPS} !=on
RewriteRule ^login\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteRule ^login\.php?lo=true$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
任何帮助都将不胜感激 不能将查询字符串放在规则的正则表达式中,只有URI匹配,而不是查询字符串。尝试:
RewriteCond %{HTTPS} off
RewriteRule ^login\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} off
RewriteRule ^check_login\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/?(check_)?login\.php
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
除非在替换URL中使用
?
,否则无需担心查询字符串。以下是您需要的两组规则(第二组规则与第一组规则完全相反):
注意,我使用了302重定向进行测试。别忘了切换到301。据我所知,
HTTPS
将启用或未设置。我没有看到过off
@SalmanA,至少从那时起,“如果连接使用SSL/TLS,将包含文本”on“,否则将包含文本”off“。感谢您的回答,我尝试了一下,但是我更喜欢@SalmanA在4行而不是7行中完成
RewriteCond %{HTTPS} !=on
RewriteRule ^(?:login\.php|check_login\.php)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
RewriteCond %{HTTPS} =on
RewriteRule !^(?:login\.php|check_login\.php)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]