2017-07-20 90 views
1

根據a DreamHost article on enforcing HTTPS模式「^」和「^(。*)$」會導致不同的RewriteRule行爲,但我不明白爲什麼。

根據文章,用「^」如下「強迫任何HTTP請求使用HTTPS被改寫」:

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

同樣的文章說,而是使用的「^ $(*)。」 RewriteRule中的「^」也強制直接鏈接的資源(圖像,css等)使用https「。

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

爲什麼RewriteRule中的「^(。*)$」適用於頁面資產,而「^」不是?除了文章提到的區別之外,還有一些元素,比如相對網址和絕對網址? Apache HTTP Server如何知道資源是頁面資源而不是直接請求?順便說一下,我已經將「直接鏈接的資源」解釋爲專門提到頁面資產,而不是通常意義上的HTTP鏈接,所以我相應地解釋了我的問題,但是如果我誤解了這一點,那麼我會很感激見解。

回答

1

Imho,它沒有任何意義。

我知道一些託管公司有他們自己的執行mod_rewrite。這兩條規則在實踐中有什麼不同?

從理論上講,他們應該做同樣的事情任何URI將匹配^^(.*)$

而且當目標甚至不使用正則表達式(他們使用%{REQUEST_URI}而不是$1)的部分比賽。

如果它是^$(基本上,一個空字符串,所以只有根URL將被重定向)有所作爲。

直接或稱訪問不會改變任何事情要麼,除非你使用一個RewriteCond%{HTTP_REFERER}

+1

呀,子模式有點怪異的看着我了。也許這是引用子模式的規則的先前版本的遺蹟。無論哪種方式,感謝您的見解。接受答案。 –

相關問題