0

警告: 私はApacheの専門家でも、トレーニングや貿易 (C++ 開発者) による Web マスターでもないので、これはかなり明白な初心者レベルの質問だと思います。あらかじめお詫び申し上げます。

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

簡単な例:

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 を所有する仮想ホストに存在するため、VHost で他に興味深いことが起こっていて、これに影響を与えていることがわかりません。

私の問題はすべて正規表現にあると思いますが、正直なところ、それは私を逃れています。

どんな援助も大歓迎です。私はApacheのドキュメントとGoogleで見つけたすべてのヒントを研究してきましたが、それを見ていません。

ありがとう〜

4

2 に答える 2

3

実際には、「送信元」ドメインと「宛先」ドメインが同じサーバーによって処理されている限り、ドメイン名を書き換える必要はありません。同じホストを参照するには、異なるドメインに別名を付けるだけです。具体的には、<VirtualHost>次のようなブロックがあるとします。

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

ServerAlias以下に示すように、ディレクティブを追加するだけです。

<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

于 2009-06-06T04:01:18.457 に答える
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

PS ロックされている Web アプリのコーディング要件により、実際には cgi が受け取る URL を xxx.masterdomain.com にする必要があります (長い話であり、私の選択やアプローチではありません。これまでの問題を解決しようとしているだけです)。それは非常に制約された要件で与えられています.... また、サニタイズされたデータについてお詫び申し上げます-- on-high からの指示に従います. -smile-) ありがとうございました!

于 2009-06-06T06:54:19.713 に答える