![仅为使用 htaccess 登录重写 https 规则](https://linux22.com/image/576698/%E4%BB%85%E4%B8%BA%E4%BD%BF%E7%94%A8%20htaccess%20%E7%99%BB%E5%BD%95%E9%87%8D%E5%86%99%20https%20%E8%A7%84%E5%88%99.png)
我使用的是 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 通道发送请求,该通道不包含凭据;如您所见,需要重新输入它们。
不要按照你正在做的事情,而要像这样实现它:
- 您正在提交的 HTML 表单必须指向
https://
要安全提交凭证的地址。没有例外。 为了确保您的代码不会意外出现异常,请阻止通过 HTTP 对登录表单的所有访问,而不是重定向。
RewriteCond %{HTTPS} !on RewriteCond %{REQUEST_URI} ^/login\.php [NC] RewriteRule ^ - [F,L]