いくつかの概念を理解する必要があります。サーバーがユーザーが要求した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]