Apache-2.4

Apache 條件重定向 HTTP 到 HTTPS

  • February 26, 2018

全部。我有語法問題。我試過關注其他來源,但它不起作用。

我已經成功創建了一個無條件的 HTTP 到 HTTPS 重定向。訪問http://www.robjvargas.com,最後訪問 HTTPS。那裡一切都很好。

但現在我的證書似乎需要 HTTP。它使用 Let’s Encrypt,因此需要每 90 天更新一次。重定向生效後,試執行失敗。關閉重定向後,試執行成功。

所以我嘗試放入一個 RewriteCond 來免除證書更新流量:

# HTTP to HTTPS redirect
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{Request_URI} !^./acme-challenge/*
RewriteRule (.*) https://www.robjvargas.com$1 [R,L]

只是它不起作用。一旦我看到它,我想我錯過了值得一巴掌的東西,但我沒有看到它。使用上面的程式碼,HTTP 到 HTTPS 的重定向似乎仍然是通用的。所以,很明顯, RewriteCond 是不正確的。URI 之前的時間段可能是錯誤的,但我已經嘗試過使用和不使用它。

我還將完整的 URI 放入 RewriteCond,但這也不能免除它。

快到了。我沒有收到任何錯誤。它只是永遠不會滿足預期的條件。

我錯過了什麼?

但現在我的證書似乎需要 HTTP。

這並不完全正確。我個人正在通過 https 進行更新。但是,為了使其正常工作,您需要確保通過從 http VirtualHost 複製相關部分來允許訪問 https VirtualHost 中的質詢 URI。如果您不能或不想這樣做,以下是如何使用您開始編寫的條件重定向使其在 http 上工作。

問題是您目前的正則表達式將匹配挑戰 uri。根據Apache Docs,REQUEST_URI 以 / 開頭,因此您應該像這樣查找挑戰 uri ^\/\.well-known\/.*$:. 這將匹配挑戰 URI ( http://example.com/.well-known/acme-challenge )。

全部放在一起:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^\/\.well-known\/.*$
RewriteRule (.*) https://www.robjvargas.com/$1 [R,L]

以防將來出現問題,請使用:htaccess tester

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