2017-06-17 7 views
1

私の問題は正しい.htaccess設定またはPHPリダイレクト(Laravelフレームワーク)で修正できると思います。複数のサブドメインをhttpsでリダイレクト

私は約20カ国のウェブサイトを持っています。私が米国に行きたい場合は、www.mysite.com/?d=US

のように20個のサブドメインを作成します。「us.mysite.com」、「uk.mysite.com」、 "germany.mysite.com"、 "france.mysite.com" ..

すべてのサブドメインは/を指しており、正常に動作します。

「http」を「https」にリダイレクトするように設定した.htaccessがあり、正常に動作します。

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

私はこれを試してみて、動作するはずです...しかし、私はそれが唯一の国のために動作させる場合でも...ではありません。

RewriteCond %{HTTPS_HOST} ^us.mysite.com$ [NC] 
RewriteRule ^(.*)$ https://us.mysite.com/?d=US [R=301,NC,N] 

RewriteCond %{HTTPS_HOST} ^germany.mysite.com$ [NC] 
RewriteRule ^(.*)$ https://germany.mysite.com/?d=DE [R=301,NC,N] 

RewriteCond %{HTTPS_HOST} ^france.mysite.com$ [NC] 
RewriteRule ^(.*)$ https://france.mysite.com/?d=FR [R=301,NC,N] 

RewriteCond %{HTTPS_HOST} ^uk.mysite.com$ [NC] 
RewriteRule ^(.*)$ https://uk.mysite.com/?d=UK [R=301,NC,L] 

私はそれが最初のredireccion(SSL).. httpsといくらか競合していると思います。私は "us.mysite.com"に行き、nothingsが起こる。私は "/?d = US"なしで "https://us.mysite.com"しか得られない。

どうすれば修正できますか?ありがとうございました!

答えて

0

HTTPS_HOSTのようなものはありません。HTTP_HOSTのみです。また、無限ループを防ぐ必要があります。私はあなたのHTTPSリダイレクトを最後に置き、それを設定して、国のURLがHTTPで訪れたときに二重リダイレクトを得ないようにします。

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^us.mysite.com$ 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{QUERY_STRING} !(?:^|&)d=US(?:&|$) 
RewriteRule^https://us.mysite.com/?d=US [R=301,L] 

RewriteCond %{HTTP_HOST} ^germany.mysite.com$ 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{QUERY_STRING} !(?:^|&)d=DE(?:&|$) 
RewriteRule^https://germany.mysite.com/?d=DE [R=301,L] 

RewriteCond %{HTTP_HOST} ^france.mysite.com$ 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{QUERY_STRING} !(?:^|&)d=FR(?:&|$) 
RewriteRule^https://france.mysite.com/?d=FR [R=301,L] 

RewriteCond %{HTTP_HOST} ^uk.mysite.com$ 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{QUERY_STRING} !(?:^|&)d=UK(?:&|$) 
RewriteRule^https://uk.mysite.com/?d=UK [R=301,L] 

RewriteCond %{HTTPS} off 
RewriteCond %{QUERY_STRING} !(?:^|&)d= 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

しかし、あなただけのdのparamを必要とするのではなく、あなたのコード内でHTTP_HOSTを確認することができません。ここにありますか?

もう1つのことは、要求された要求URIをすべて破棄していることです。 HTTPSリダイレクトの場合と同じようにそれらを保持したくないのですか?

関連する問題