2017-08-29 63 views
0

我一直在試圖從HTTP重寫一個子目錄到HTTPS無濟於事。我已經看過其他職位,並試圖實施這些解決方案:重寫子目錄爲https

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} subdirectory 
RewriteRule ^(.*)$ https://www.exmaple.com/subdirectory/$1 [R,L] 

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule ^(subdirectory/.*)$ https://www.example.com/$1 [R=301,L] 

,並把它們無論是在根目錄.htaccess文件或Plesk的Apache和Ngnix設置。但每當我輸入

http://www.example.com/subdirectory/some.html 

我總是會得到

https://www.example.com/subdirectory//subdirectory/some.html 

這當然是找不到404的。任何援助表示讚賞。

+1

您是否同時使用兩者?你的第一條規則有一個問題(正則表達式中的捕獲組已經包含子目錄,所以不需要添加它,加上'%{REQUEST_URI}'的'RewriteCond''應該檢查'^ /子目錄'),但第二個看起來很好只要你的RewriteBase是默認的('/') – Charles

+1

確保你清除了你的瀏覽器緩存。正如Charles提到的,你的第二個規則塊看起來不錯。但是,如果您以前嘗試過錯誤的301重定向,那麼瀏覽器將難以緩存這些重定向。 – MrWhite

+0

@Charles我只在一個地方做過。你能把它當作答案嗎?我不確定我是否完全瞭解了第一條規則。 – Jack

回答

0

要強制HTTPS訪問只是一個單一的目錄,然後你可以使用方法是:

RewriteEngine On 

RewriteCond %{HTTP:X-Forwarded-SSL} !on 
RewriteCond %{REQUEST_URI} ^\/(subdirectory) 
RewriteRule (.*) https://%{HTTP_HOST}/$1 [L,R=301] 

RewriteCond %{HTTP:X-Forwarded-SSL} =on 
RewriteCond %{REQUEST_URI} !^\/(subdirectory) 
RewriteRule (.*) http://%{HTTP_HOST}/$1 [L,R=301] 

什麼上面做什麼?第一個條件檢查HTTPs是否爲而不是,如果不是,那麼它將檢查目錄/subdirectory/,如果發現它會強制該目錄並且僅將該目錄設爲HTTPs。

第二套規則基本上是相反的,除了目錄/subdirectory/之外,強制所有內容都是HTTP。

請確保您清除緩存之前測試此。