2009-06-06 15 views
0

警告:私はではありません。トレーニングやトレードでApacheの専門家またはウェブマスター(C++開発者)です。これはかなり初心者レベルの質問です。事前にお詫び申し上げます。Apacheがサブドメインリクエストにドメイン要求を書き直します

要求されたドメインをサブドメインとして私たちのドメインにマップするApache 2.x書き換えルールが必要です。

簡略化した例(S):

domain1.com/index.php?option=80  ->  domain1.masterdomain.com/index.php?option=80 
www.domain1.com/index.php?option=99 ->  domain1.masterdomain.com/index.php?option=99 
domain2.com/index.php?option=33  ->  domain2.masterdomain.com/index.php?option=33 
www.domain2.com/index.php?option=44 ->  domain2.masterdomain.com/index.php?option=44 

は私が提案し、さまざまなオプションを試していないが、これまでのところ、何も喜びました。最新の試みは、次のとおりです。

RewriteRule ([^.]+)\.com(.*) http://$1.masterdomain.com [L] 

注:これは、特定のIPのポート80を所有している仮想ホストに住んでいるので、他には何も面白いが、私はいずれかがこの上で影響を与えた見ることができるバーチャルホストで起こっていません。

私の問題はすべて私の正規表現にあると信じていますが、正に、それは私を逃しています。

何か助けが必要です。私はApacheのドキュメントと私が見つけることができるすべてのグーグルのヒントを勉強してきましたが、私はそれを見ていないだけです。 〜

+0

これはおそらく、おそらくServerFaultタイプの質問です。 –

答えて

3

おかげで、実際に限り、「ソース」と「宛先」のドメインが同じサーバーで処理されるように、ドメイン名を書き換える必要はありません。同じホストを参照するには、異なるドメインの別名を付けるだけです。具体的に:

<VirtualHost *:80> 
    ServerName domain1.masterdomain.com 
    # other rules 
</VirtualHost> 
<VirtualHost *:80> 
    ServerName domain2.masterdomain.com 
    # other rules 
</VirtualHost> 

あなたがしなければならないのは、以下に示すようにServerAliasディレクティブを追加している:私は今、あなたがこのような何かを見て<VirtualHost>ブロックがあるとし

<VirtualHost *:80> 
    ServerName domain1.masterdomain.com 
    ServerAlias domain1.com 
    ServerAlias www.domain1.com 
    # same other rules as before 
</VirtualHost> 
<VirtualHost *:80> 
    ServerName domain2.masterdomain.com 
    ServerAlias domain2.com 
    ServerAlias www.domain2.com 
    # same other rules as before 
</VirtualHost> 

これはApacheが扱えるようになりますドメイン名domain1.comwww.domain1.comは同じ方法でdomain1.masterdomain.comを処理します。

+0

驚くほど良いアイデア!これは、正規表現のリダイレクトが実際には必要ない時間のほとんどを意味します。 –

+0

実際にmod_rewriteを必要とするケースは非常にまれです。あるいは、少なくとも、人々はそれをたくさん使いすぎる傾向があります。 –

0

お返事ありがとうございます!実際には、VirtualDocumentRootディレクティブを活用して、すべてのサイトを処理する単一のVHost(すべてが同じ構造を持つため)があります。私は望むならば、全体のVHostエントリを投稿することができますが、私はそれが私の質問のために過度のことだと思った。

私は以前の投稿から進歩しました。以下はブラウザのURLを更新するものの、必要に応じて書き換えを実行します。内部でリダイレクトされたことをユーザーに知らせたくありません。

RewriteCond %{HTTP_HOST} ^(www\.)?([^.]+)\.com$ [NC] 
RewriteRule ^(.*)$  http://%2.masterdomain.com$1 

なぜブラウザのURLが更新されているのかわかりません。私はあなたがルールラインの最後に[R]を明示的に追加した場合にのみそれを読むと思った。最終的に、ブラウザはまだ表示する必要があります:test1.com/index.php?id=5、内部ではcgiはtest1.masterdomain.com/index.php?id=5を受け取ります。

参考になるかもしれない(またはしていない)別のデータポイントは、rewrite.logに、一致後、暗黙的にリダイレクト(rc = 302)を実行していることがわかります。私が重要だと思う2つの行は次のとおりです。

implicitly forcing redirect (rc=302) with http://test1.masterdomain.com/index.php 
redirect to http://test1.masterdomain.com/index.php?id=5 [REDIRECT/302] 

ご意見・ご提案は大変ありがとうございます。20年以上のC++ですが、Apacheには1週間弱しかかかりませんでした。まだ非常に苦労している初心者です。

-wb

P.S.ロックされているWebアプリケーションのコーディング要件のために、私は実際にxxx.masterdomain.comになるためにcgiによって受信されたURLを必要としています(長文、ではなく私の選択またはアプローチ;それは非常に制約された要件で与えられています....また、浄化されたデータのための私の謝罪 - on-highからの指示に従ってください - 微笑 - )もう一度ありがとう!

関連する問題