apache .htaccess 文件中的 HTTP_HOST 和 HTTPS_HOST 有什麼區別?
我正在編輯一個
.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 請求標頭的值。也許您正在考慮
HTTPS
Apache 伺服器變數?這包含值on
或off
取決於請求是否通過 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.com
或www.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 可能是一個問題。
是的,這肯定是個問題。使用者將收到一個瀏覽器警告證書無效,並且請求永遠不會到達您的伺服器。