3

我正在尝试编辑我的.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]

任何帮助将不胜感激。

4

2 回答 2

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]
于 2013-01-10T09:12:03.160 回答
3

?除非您在替换 URL 中使用 a,否则无需担心查询字符串。以下是您需要的两组规则(第二组规则与第一组正好相反):

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。

于 2013-01-10T09:17:41.680 回答