2015-08-18 131 views
2

我無法評論以前的帖子!我想問一個問題,因爲我是新手。有人能夠向我解釋什麼:HTTP到HTTPS .htaccess

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} =http 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

其實在.htaccess文件中? 「=」和「!=」之間的區別是什麼?我使用Cloudflare和安德魯建議這種配置工作,但我正在尋找更好的理解。對我來說,如果你得到一個http請求使用http。如果我將http更改爲https,但它說明了太多重定向。所有幫助appriciated。

回答

2

%{HTTP:X-Forwarded-Proto}是一個變量,用於訪問X-Forwarded-Proto HTTP頭的值,該頭由cloudflare或AWS(或其他負載平衡服務)用於指示原始請求的協議。這幾乎總是「http」或「https」。

mod_rewrite documentation for RewriteCond說:

'= CondPattern'(詞典順序相等)

對待CondPattern作爲純字符串,按字母順序比較它與TestString。如果TestString按照字典順序等於CondPattern(兩個字符串完全相同,字符爲字符),則爲true。如果CondPattern是「」(兩個引號),則將TestString與空字符串進行比較。

換句話說,測試字符串%{HTTP:X-Forwarded-Proto}必須等於「http」。

此外:

您可以前綴與模式串 '!'字符(感嘆號)來指定不匹配的模式。

所以,!=表示「不等於」。

因此,條件測試請求是否最初是「http」,如果是這樣,規則將瀏覽器重定向到https://%{HTTP_HOST}%{REQUEST_URI}(https)。

+0

這是一個非常翔實的答案,現在我明白了。非常感謝喬恩花時間。 –