2016-12-07 137 views
1

我卡住使用htaccess重定向,混合一些答案[1][2]關於htaccess重定向。htaccess:重定向所有子域到主https網域

我的目標是將每個子域(不是www)重定向到我的主域(從https://www開始),保持Request_URI(如指定的文件夾)原樣。

這裏是我做了什麼:

RewriteEngine On 

RewriteCond %{HTTP_HOST} ^(.+)\.mydomain\.fr$ [NC] 
# OR : RewriteCond .* ^(.+)\.%{HTTP_HOST}%{REQUEST_URI}$ [NC] 

RewriteCond %{HTTP_HOST} !^www\.mydomain\.fr$ [NC] 
RewriteRule^https://www.mydomain.fr%{REQUEST_URI} [L,R=301,QSA] 

這個配置不重定向(強文是壞的重定向):

交換 RewriteCond %{HTTP_HOST} !^www\.mydomain\.fr$ [NC]

RewriteCond %{HTTP_HOST} !^https://www\.mydomain\.fr [NC]給我壞重定向的錯誤。 我的想法是要檢查HTTP_HOST是格式https://www.mydomain,如果不是重定向到與請求信息的良好URL RewriteRule^https://www.mydomain.fr/%{REQUEST_URI}

爲什麼會有不好的重定向? 我是否必須編寫2組條件和規則來首先檢查子域,然後HTTPS? (目前,我試圖讓使用一個規則和幾個條件重定向,這可能不是最好的做法)

編輯:我的目標是讓這些重定向:

在此先感謝您的任何答案/想法。

編輯2:

我試過在THIS問題Larzan答案,這似乎做我想做的只是一件事是什麼:如果我在我的瀏覽器的網址是一樣的東西https://foobar.mydomain.fr,瀏覽器顯示了我關於安全的大紅色警告,我必須接受風險,那麼重定向到https://www.mydomain.fr。我如何刪除此警告?

#First rewrite any request to the wrong domain to use the correct one (here www.) 
RewriteCond %{HTTP_HOST} !^www\.mydomain 
RewriteRule ^(.*)$ https://www.mydomain.fr%{REQUEST_URI} [L,R=301] 

#Now, rewrite to HTTPS: 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
+1

「https://foo.mydomain.fr => https:// foo.mydomain.fr」是什麼意思?兩個URL都是一樣的,什麼都沒有發生? –

+0

我編輯了我的問題來添加我想要的重定向。 @DusanBajic:我想壓制子域foo。 – Marcassin

+0

@anubhava:我想去嘗試httpS而不是http – Marcassin

回答

0

對單個規則替換您的兩個規則:

RewriteEngine On 

RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} !^www\.mydomain\.fr$ [NC] 
RewriteRule^https://www.mydomain.fr%{REQUEST_URI} [L,R=301,NE] 

測試後徹底清除瀏覽器緩存中的變化。

+0

嗨,這個解決方案修復了重定向'www.mydomain.fr' =>'https:// www.mydomain.fr',但是如果我在我的資源管理器中輸入:'https:// foobar.domain.fr',URL仍然是一樣的。輸入的URL不以www開頭,所以應該接受重定向。但似乎沒有。 「www」!=「foobar」爲什麼Apache看不到?謝謝 – Marcassin

+0

此規則也適用於子域,但子域應該指向與主域的DocumentRoot相同的目錄。 – anubhava

+0

有沒有辦法重定向每個子域(通配符)?所以沒有目錄聲明爲子域,只爲主域。 (參看編輯2)。謝謝 – Marcassin