我正在尝试编辑我的.htaccess
文件,以便让用户通过某些网页的SSL连接,而不是其他网页。
例如,当访问名为login.php
的页面(有时为login.php?lo=true
)时,他们会在其登录详细信息中输入。在他们访问login.php
后,他们会前往check_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或check_login.php只是http
,而不是https
我对ModRewrite规则的了解有限,到目前为止,我已实现了以下内容:
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]
非常感谢任何帮助。
答案 0 :(得分:3)
您不能将查询字符串放在规则中的正则表达式中,只能匹配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]
答案 1 :(得分:3)
除非您在替换网址中使用?
,否则无需担心查询字符串。以下是您需要的两套规则(第二组规则与第一组完全相反):
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]
请注意,我已使用302重定向进行测试。别忘了改为301。