2012-02-23 9 views
1

mod_rewriteを使用して特定のサブドメインをリダイレクトして別のドメインを使用する方法について質問があります。私は、私のドメイン名ごとに別々の書き換えルールを作成する必要なしにこれを行う最短の方法を探しています。私は多くの新しいドメイン名(およそ20-30のドメイン合計)を追加します。複数のサブドメインを別のドメイン名にリダイレクト

私の主なドメイン名がexample.comで、そのドメイン名をすべて使いたいとします。したがって、他のドメインが使用されている場合は、サブドメイン接頭辞とURLパスを保持したままメインドメインに自動的にリダイレクトされます。

例:
test.example.org => test.example.com
test2.example.co.uk => test2.example.com
test3.example.net/hello/world。 PHP => test3.example.com/hello/world.php

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(.*)\.([a-zA-Z]+)\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1\.example.com/$1 [R=301,L] 

上記正しくまたはそれが適切な構文であれば動作する場合、私はわかりませんよ。しかし、基本的には、サブドメインの接頭辞、ドメイン名、およびTLD(.org、.info、.biz、.co.uk、.netなど)と一致させたいと考えています。私は無限のリダイレクトループを防ぐために最初に正しいメインドメイン(example.com)でないことを確認する必要があると想定します。

また、HTTPSがオンかオフかを確認し、リダイレクトを正しく設定することは可能でしょうか?そうでない場合は、常にHTTPSをONに設定することができます。

ご迷惑をおかけして申し訳ありませんが、私はドメインのすべてを.htaccessにプログラムする必要なく、初めてこの権利を得ることを確認したいと思います。

ありがとうございます! :)

答えて

2

(。*)は貪欲ですので、あなたはそれを使いたくないので、無限ループを再作成したくないと思います。それが戻っexample.comからexample.comで終わる任意のホストにリダイレクトされますし、あなたはリダイレクトループを取得しますので、ルールは機能しません

RewriteEngine on 

RewriteCond %{HTTPS}s ^..(s?) 
RewriteRule ^   -        [E=PROTO:http%1]    

RewriteCond %{HTTP_HOST} !^\w+\.example\.com$    [NC] 
RewriteCond %{HTTP_HOST} ^(\w+)\.\w+\..+     [NC] 
RewriteRule ^/?(.*)  %{ENV:PROTO}://%1.example.com/$1 [R=301,L] 

+0

この例を使用しますが、それは作業を行います。私はちょうどそれが必要に応じて正確に動作するように、いくつかのさらなるテストを行う必要があります。詳しい対応をありがとう! –

+0

最初のルールがどのように動作するか理解していますか?文字列がonまたはoffであるので、 '^ ..(s?)'が%1 = "s"または ""になり、env変数PROTOが正しく設定されます。 Cond2Aは '* .example.com'のループを防ぎ、cond2Bファイルはサブドメインを上回ります。 Rule2Bはそれをすべてまとめます。それがうまくいくとダニはうまくいくでしょう:-) – TerryE

+0

それは完璧に動作し、私はそのコンセプトを理解しています。私が抱えている1つの問題は、誰かがexample.orgに行ったと言います。彼らが移動するまでexample.orgに滞在します。私は他のトリックを試みましたが、メインの "example.com"に変更することはできません。 –

1

。あなたは.com終わっていないことを何かを一致させるために、このように見えるように正規表現を変更する必要があります。

RewriteCond %{HTTP_HOST} ^([^\.]+)\.?([a-zA-Z]+)\.(?:(?!com).)*$ [NC] 
+0

あなたは間違いなく私の混乱を整理しました!唯一の問題は、私も ".com"を持つ他のドメインを持つことができることです。 –

関連する問題