web-dev-qa-db-ja.com

特定のHTTP_HOSTから要求されたときにページを内部的に書き換える方法

Drupalサイトexample.comがあり、クライアントが新しいドメイン名campaign.comを購入したキャンペーンを推進しています。 campaign.comのリクエストがDrupalサイトの特定のページに内部的に書き換えられるようにしたいと思います。注Drupalは、ドキュメントルートで.htaccessファイルを使用します。

通常のDrupal書き換えは

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

以下を追加しましたbefore通常の書き換え。

# Custom URLS (eg. microsites) go here
RewriteCond %{HTTP_Host} =campaign.com
RewriteCond %{REQUEST_URI} =/
RewriteRule ^ index.php?q=node/22 [L]

残念ながら機能しません。ホームページを表示するだけです。書き換えログを有効にすると、これが表示されます。

1. [rid#2da8ea8/initial] (3) [perdir D:/wamp/www/] strip per-dir prefix: D:/wamp/www/ -> 
2. [rid#2da8ea8/initial] (3) [perdir D:/wamp/www/] applying pattern '^' to uri ''
3. [rid#2da8ea8/initial] (2) [perdir D:/wamp/www/] rewrite '' -> 'index.php?q=node/22'
4. [rid#2da8ea8/initial] (3) split uri=index.php?q=node/22 -> uri=index.php, args=q=node/22
5. [rid#2da8ea8/initial] (3) [perdir D:/wamp/www/] add per-dir prefix: index.php -> D:/wamp/www/index.php
6. [rid#2da8ea8/initial] (2) [perdir D:/wamp/www/] strip document_root prefix: D:/wamp/www/index.php -> /index.php
7. [rid#2da8ea8/initial] (1) [perdir D:/wamp/www/] internal redirect with /index.php [INTERNAL REDIRECT]
8. [rid#2da7770/initial/redir#1] (3) [perdir D:/wamp/www/] strip per-dir prefix: D:/wamp/www/index.php -> index.php
9. [rid#2da7770/initial/redir#1] (3) [perdir D:/wamp/www/] applying pattern '^' to uri 'index.php'
10.[rid#2da7770/initial/redir#1] (3) [perdir D:/wamp/www/] strip per-dir prefix: D:/wamp/www/index.php -> index.php
11.[rid#2da7770/initial/redir#1] (3) [perdir D:/wamp/www/] applying pattern '^(.*)$' to uri 'index.php'
12.[rid#2da7770/initial/redir#1] (1) [perdir D:/wamp/www/] pass through D:/wamp/www/index.php

私はmod_rewriteに慣れていないので、何かが足りないかもしれませんが、http://example.com/node/3http://campaign.com/の呼び出しのログを比較しても、意味のある違いは見られません。具体的には、4行目のURIとargsは正しく、7行目の内部リダイレクトは正しく、12行目のパススルーは正しいようです(ファイルindex.phpが存在するため)。しかし、何らかの理由で、内部リダイレクトの前後にクエリ文字列が破棄/無視されたようです。私は完全に困惑しています。

また、誰かが書き換えログを理解するためのリファレンスを提供できれば、それが役立つかもしれません。内部リダイレクトを介してクエリ文字列を追跡する方法があれば素晴らしいと思います。

FWIW Apache 2.2.17でWampServer 2.1を使用しています。

6
Andy

httpd.confからデータをプルするcampaign.comexample.com/macguffin/

<VirtualHost *:80>
ServerName campaign.com

<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>

ProxyRequests Off
ProxyPreserveHost Off

ProxyPass / http://example.com/macguffin/
ProxyPassReverse / http://example.com/macguffin/

<Location />
    Order allow,deny
    Allow from all
</Location>
</VirtualHost>
5
ʍǝɥʇɐɯ