Apache-2.2

僅針對使用 htaccess 登錄的 https 重寫規則

  • February 24, 2012

我正在使用 apache,並且在我的索引頁 (index.php) 上有一個登錄名和密碼欄位。使用 login.php 頁面進行身份驗證,然後如果我是 authaurize,我可以到達下一頁 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,但我仍然需要填寫登錄名和密碼欄位。

你有什麼想法嗎?

不要這樣做!

您的憑據正在以POST請求的形式發送,未加密。伺服器獲取該請求,並使用配置的重定向進行響應,而不是將請求傳遞給 PHP。您的客戶看到該重定向,並且不會重新送出POST針對它的請求;畢竟,它將POST請求發送到它應該發送它的地方並得到了一個非錯誤響應程式碼(301)。GET它通過不包含憑據的新 HTTPS 通道發送請求;如您所見,它們需要重新輸入。

而不是你在做什麼,像這樣實現它:

  1. 您送出的 HTML 表單必須指向要https://安全送出的憑據的地址。沒有例外。
  2. 為確保您的程式碼不會意外出現異常,請阻止所有通過 HTTP 訪問登錄表單,而不是重定向。
RewriteCond %{HTTPS} !on 
RewriteCond %{REQUEST_URI} ^/login\.php [NC]
RewriteRule ^ - [F,L]

引用自:https://serverfault.com/questions/363512