Dot-Htaccess

apache .htaccess 文件中的 HTTP_HOST 和 HTTPS_HOST 有什麼區別?

  • November 6, 2020

我正在編輯一個.htaccess文件..

在 RewriteRules 的 RewriteCondition 中,HTTPS_HOST似乎只匹配通過https://協議 (ssl) 訪問的 url。我在某處的文件中看到它是一個 T/F 變數,指示是否使用安全協議訪問了 url。

但是,我無法在文件上找到是否HTTP_HOST只匹配http://協議,或者它是否有效匹配//相關協議,這意味著它同時匹配 http:// https://

有人可以以一種或另一種方式確認,或者向我指出此資訊的確切來源嗎?

此外,如果HTTP_HOST匹配兩個協議變體,過濾**僅 匹配協議的最佳方法是什麼http://

例子:

<IfModule mod_rewrite.c>
RewriteEngine on
Rewritecond %{HTTP_HOST} ^\/\.(?!some-url).*$
RewriteRule (.*) https://www.example.com/$1 [R=301,L,NC]
</IfModule>

相比之下:

...
Rewritecond %{HTTPS_HOST} ^\/\.(?!some-url).*$
...

編輯:實驗表明,HTTP_HOST 似乎與兩種協議都匹配,而HTTPS_HOST僅在協議或 url 以https://.

.

*(注意:apache2標記

TBH,我不確定我正在執行什麼版本的 apache。嘗試找出,所以我可以附加正確的標記。

我嘗試了httpd -v, apache -v, apache2ctl -S, apachectl -S,httpd -S等。(這不是虛擬主機問題,並且我有 nginx,無論如何我認為它是用於那個(虛擬伺服器)的,但我還是嘗試了最後 3 個(虛擬主機)命令,看看它們是否會在我的 apache 版本上啟發我)。

對這些命令的響應說我必須先安裝 apache2,或者它是一個未知命令。

我有一個/etc/apache2文件夾,但沒有/usr/local/apache(因此沒有/usr/local/apache/bin/httpd文件夾)。

)*

沒有這樣的 Apache 伺服器變數HTTPS_HOST,只有HTTP_HOST. 如果HTTPS_HOST在您的伺服器上設置,那麼它特定於您的伺服器。

HTTP_HOST伺服器變數包含 HTTP 請求標頭的值(Host主機名),這與使用的協議(HTTP 或 HTTPS)無關。與所有 start 變數一樣HTTP_,它們包含相應 HTTP 請求標頭的值。

也許您正在考慮HTTPSApache 伺服器變數?這包含值onoff取決於請求是否通過 HTTPS。因此,如果您沒有管理 SSL 的前端代理,那麼它就是HTTPS您用來確定請求是通過 HTTP 還是 HTTPS 協議的伺服器變數。

參考:

我有 nginx

那麼,你用 Nginx 做什麼呢?是你的應用伺服器嗎?還是您將其用作前端代理?在這種情況下,HTTPS可能畢竟不是要使用的變數。


更新:

Rewritecond %{HTTP_HOST} ^\/\.(?!some-url).*$
RewriteRule (.*) https://www.example.com/$1 [R=301,L,NC]

這真的沒有意義。條件RewriteCond指令)永遠不會成功(因為標Host頭從不包含斜杠),所以重定向永遠不會發生。

如上所述,HTTP_HOST伺服器變數僅包含主機名,例如。example.comwww.example.com。它不包含 URL 路徑,正如您在這裡所假設的那樣。您的條件正在嘗試匹配/. 跟隨的文字some-url(使用負前瞻)。主機名永遠不會以(甚至包含)斜杠開頭,因此它在第一個字元處失敗。

我正在嘗試修改阻止letsencrypt續訂的htaccess規則,….所以存在主要問題(.well-known得到403)

要對特定 URL 路徑的特定規則進行例外處理,您可以執行以下操作:

Rewritecond %{REQUEST_URI} !^/\.well-known
RewriteRule (.*) https://www.example.com/$1 [R=301,L,NC]

這不包括(注意!前綴)任何以/.well-known. CondPattern上的!前綴否定正則表達式。伺服器變數包含來自請求的完整 URL 路徑(自然不包括協議、主機名和查詢字元串)。REQUEST_URI

但是,您聲明“.well-known正在收到 403” - 您可能需要找出觸發 403 的原因並對該規則應案例外。

或者,在文件的最頂部包含一個例外.htaccess

# Any requests that start "/.well-known" are ignored
RewriteRule ^\.well-known - [L]

(注意與 URL 路徑匹配的RewriteRule 模式中缺少斜杠前綴。)

最初(也許現在也是)我認為在過期證書上要求 https 可能是一個問題。

是的,這肯定是個問題。使用者將收到一個瀏覽器警告證書無效,並且請求永遠不會到達您的伺服器。

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