2017-06-19 3 views
2

テストサイトを設定しようとしていますが、実際に問題が発生して.htaccessが適切にリダイレクトされています。.htaccess URLはリダイレクトされていますが、サブドメインのコンテンツはありません

ユーザーがtest.example.comを入力すると、www.example.com/testの内容が表示されます。私の書き換えルールでは、アドレスバーにtest.example.comを使用することができますが、実際にはtestというサブフォルダではなく、ルート(www.example.com)の内容を表示しています。

私は.htaccessの指導者ではありませんが、私は5年間スタックオーバーフローを使用しています。これは私が質問をするのに十分に困惑しています。あなたの集団の知恵は高く評価されます。

は、ここに私の.htaccessコードの関連部分です:

RewriteEngine On 

# Rewrite for http cases 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L] 

# Rewrite for no www cases 
RewriteCond %{HTTP_HOST} !www\.example\.com [NC] 

#redirect for test subdomain 
RewriteCond %{HTTP_HOST} !^test\.example\.com$ [NC] 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

# redirect to correct for old subfolder usage 
RewriteRule ^oldsubfolder/$ https://www.example.com/ [L,R=301] 

答えて

1

私はときに、ユーザーの種類test.site.comwww.example.com/testの内容を表示したいです。

私はあなただけのドメインを持っているとtest.site.comが本当に(あなたの質問の残りの部分と一致するように思われる)test.example.comあるべきと仮定?

投稿したコードには、本当にこのリダイレクトを試みるものは何もありません。投稿したコードでは、test.example.comのリクエストはリダイレクトされません。そうであれば、キャッシュされたレスポンスが表示されている可能性があります。ブラウザのキャッシュをクリアします。あなたが好きなものを必要とする

(?:www\.)?一部は、単にサブドメインのオプション wwwサブドメインをキャッチ
RewriteCond %{HTTP_HOST} ^(?:www\.)?(test)\.example\.com [NC] 
RewriteRule (.*) http://www.example.com/%1/$1 [R,L] 

!このサブドメインの作成方法によっては、test.example.comwww.test.example.comの両方にアクセスする可能性があります。

%1CondPattern(すなわち。test)でキャプチャグループへの後方参照である(私はあなたのSSL証明書を疑うが、おそらく?とにかくこれを許可していません)と$1は捕獲RewriteRuleパターンに後方参照です。サブドメイン(例: "test")を取得するだけで繰り返しは避けられますが、複数のサブドメインを同じルールで処理することもできます。

これは一時的な(302)リダイレクトでもあります。それが動作していると確信している場合にのみ、これを301に変更します(意図している場合)。 301はデフォルトでキャッシュされるため、テストに問題が生じる可能性があります。

テストする前にブラウザのキャッシュをクリアしてください。


# Rewrite for no www cases 
RewriteCond %{HTTP_HOST} !www\.example\.com [NC] 

#redirect for test subdomain 
RewriteCond %{HTTP_HOST} !^test\.example\.com$ [NC] 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L] 

このブロックの途中にコメントが(それが「テストサブドメインのリダイレクト」しません)誤解を招くように思われます。ブロック全体は、サブドメインtestを除いてwwwにリダイレクトされます。他のコードはサブドメインをリダイレクトします。


UPDATE:

私はそれがアドレスバー

はい、これが可能であるにtest.example.com示し続けるだろう期待していました。 test.example.comwww.example.comが同じファイルシステムを指している場合は、を実際にホストを変更せずに書き換えることができます。この例では、test.example.comwww.example.comが同じドキュメントルートを指しているとします。 test.example.comwww.example.comので、(これはユーザーから隠されているが)要求は今test.example.comにとどまり、test.example.com/testからコンテンツを提供します

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(test)\.example\.com [NC] 
RewriteRule (.*) /%1/$1 [L] 

されています

変更は、上記のは、以下の書き換えをリダイレクト本当に同じこと。

チェックはREDIRECT_STATUSに対して、私たちは書き換えられたリクエストではなく、初期リクエストのみを処理しているので、書き換えループを回避します。最初の要求でREDIRECT_STATUSが空であり、初めて成功した後に200に設定されます。

しかし、test.example.comがどこかで全く異なっている場合は、リバースプロキシを実装し、www.example.comへのリクエストを「プロキシ」する必要があります。

+0

優秀!ありがとうございました。私はこれを試してみる。コードがサブドメインにリダイレクトされていない可能性がありますが、ウェブホストからサブドメインを作成すると、.htaccess以外のリダイレクトが処理されているように思えました。私がそれをやったときに、少なくともそれはどのように働いたのか。 –

+0

これはうまくいったようです。私はそれがアドレスバーにtest.example.comを表示し続けることを望んでいました - それは今私をwww.example.com/testに誘導するだけですが、それは大きな問題ではありません。できます!ありがとうございました。 –

+0

はい、アドレスバーに 'test.example.com'を表示することはできます。サブドメインがメインドメインと同じファイルシステム領域を指している場合、_external redirect_の代わりに_internal rewrite_を実装することができます。私は私の答えを更新しました。 – MrWhite

関連する問題