2

以下は可能ですか?

  1. ユーザーが URL を要求するhttp://example1.com/example.phpと、Apache が開きますhttp:// example1.com/example.php?id=1

  2. ユーザーが URL を要求するhttp://example2.com/example.phpと、Apache が開きますhttp:// example2.com/example.php?id=2

ただし、ユーザーはブラウザのアドレス バーに id を表示しないでください (ユーザーにはhttp://example1.com/example.phpまたはのみが表示されますhttp://example2.com/example.php)。

ID はユーザーには見えませんが、example.php.

どうすればこれを実装できますか?

4

2 に答える 2

0

それは正しい解決策ですか?

RewriteEngine On
RewriteRule ^/example.php http://example1.com/example.php$1 [P]
ProxyPassReverse /example.php?id=1 http:// example1.com/example.php

RewriteEngine On
RewriteRule ^/example.php http://example2.com/example.php$1 [P]
ProxyPassReverse /example.php?id=2 http:// example2.com/example.php
于 2012-12-13T08:08:59.933 に答える
0

いくつかの概念を理解する必要があります。サーバーがユーザーが要求したURLを受信すると、サーバーはいくつかのことを実行できます

  • URLから要求されたパスを取得し、変更せずに使用します。これがデフォルトのソリューションです
  • 要求されたパスを他の物理パスにマップします。これは、Alias、AliasMatch、またはRewriteRulesを介して実行できます。
  • 別のWebサイトが要求されているという事実を隠しながら、要求されたパスを別のWebサイトにマップします。これがプロキシソリューションであり、mod_proxyまたはmod_rewriteで処理できます(ただし、これは必要ありません)。
  • ユーザーを別のパスにリダイレクトし、使用する新しいURLを送信し、リダイレクト命令またはmod_rewrite(スイスナイフ)を使用して別のクライアント/サーバーラウンドトリップを作成します。しかし、あなたはそれを必要としません。

したがって、要求されたパスのサーバー側のみの再マッピングが必要です。

たとえば、modrewriteを使用してこのマッピングを作成するとします。RewriteRuleここに要約)で利用可能なすべてのタグをチェックすると、興味深いものは次のとおりです。

passthrough | PT:結果のURIを強制的にURLマッピングエンジンに戻して、AliasやRedirectなどの他のURIからファイル名へのトランスレータを処理します。

qsappend | QSA:元のリクエストURLからのクエリ文字列をリライトターゲットで作成されたクエリ文字列に追加します

last | L:書き換えプロセスをすぐに停止し、これ以上ルールを適用しないでください。特に、ディレクトリごとおよび.htaccessコンテキストに関する注意事項に注意してください(ENDフラグも参照してください)。

nocase | NC:パターン比較で大文字と小文字を区別しません。

PTフラグの詳細は、次のことを示しています。

RewriteRuleのターゲット(または置換文字列)は、デフォルトではファイルパスであると見なされます。

まあ、それはあなたにとって多分十分です。ただし、PTを使用することは良いことです。他のapache構成要素がある場合は、mod_rewriteジョブの後にそれらを適用できるようにする必要があります。

したがって...いくつかのクエリ文字列引数を処理する必要があり、このid引数がリクエストのドメイン名に基づいており、example.phpスクリプトのみがこの動作を必要としていると仮定します。あなたはそのようなルールであなたの研究を始めるべきです(テストされていない):

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example1.com$ [nocase]
RewriteRule ^example\.php$ example.php?id=1 [passthrough,qsappend,last]
RewriteCond %{HTTP_HOST} ^example2.com$ [nocase]
RewriteRule ^example\.php$ example.php?id=2 [passthrough,qsappend,last]
于 2012-12-13T16:01:36.497 に答える