仅为使用 htaccess 登录重写 https 规则

仅为使用 htaccess 登录重写 https 规则

我使用的是 apache,我的索引页 (index.php) 上有一个登录和密码字段。身份验证是通过 login.php 页进行的,如果我获得身份验证,我就可以进入下一个页面 home.php。

我想使用 https 来保护身份验证,但仅用于身份验证,因此我需要设置 url 重写。

RewriteCond %{HTTPS} !on 
RewriteCond %{REQUEST_URI} ^/login.php 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,QSA,L]

我考虑过这个解决方案,但它不起作用。我可以在 index.php 上输入我的凭据,然后使用 https 重定向到 login.php,但我仍然必须填写登录名和密码字段。

你知道嗎?

答案1

不要这样做!

您的凭据将以未加密的形式通过请求发送POST。服务器获取该请求,并使用配置的重定向进行响应,而不是将请求传递给 PHP。您的客户端看到该重定向,并执行不是重新提交POST针对它的请求;毕竟,它将POST请求发送到了应该发送的位置并获得了非错误响应代码 ( 301)。它GET通过新的 HTTPS 通道发送请求,该通道不包含凭据;如您所见,需要重新输入它们。

不要按照你正在做的事情,而要像这样实现它:

  1. 您正在提交的 HTML 表单必须指向https://要安全提交凭证的地址。没有例外。
  2. 为了确保您的代码不会意外出现异常,请阻止通过 HTTP 对登录表单的所有访问,而不是重定向。

    RewriteCond %{HTTPS} !on 
    RewriteCond %{REQUEST_URI} ^/login\.php [NC]
    RewriteRule ^ - [F,L]
    

相关内容