web-dev-qa-db-ja.com

.htaccessは書き換えますが、基本的なURLは保持します

Domain1.comなどの基本的なドメインがあります。また、アドオンドメインであるdomain2.comがあり、domain2.comをdomain.com?parameter=valueにリダイレクトします。これは、基本的にはdomain1.comですが、別のテンプレートを使用しますが、そのpath URLは同じままです、domain2.com、domain1.comではありません。 .htaccessファイルはアドオンドメインディレクトリ(public_html/domain2.com)内に作成され、次の2行があります。

RewriteCond % ^domain2.com
RewriteRule ^(.*) http://domain1.com?parameter=value [P]

書き換えは機能しますが、ブラウザのURLはdomain1.comに変更されます。

編集:Uは.htaccessにこのコードを持っていますが、URLはdomain1.comに変更され、代わりにdomain2.comにとどまります。

RewriteCond %{HTTP_Host} ^domain2\.com$ [OR]
RewriteCond %{HTTP_Host} ^www\.domain2\.com$
RewriteRule ^/?$ "http\:\/\/domain1\.com\/\?parameter\=value" [R=301,L]
2
Alan Kis

誤解しない限り、これはshould探しているものに沿ったものです。

RewriteEngine On
Options +FollowSyminks
RewriteCond %{HTTP_Host} ^mydomain\.com$ [NC,OR]
RewriteCond %{HTTP_Host} ^www\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://my-new-domain.com/$1 [NC,L]

URLを同じにしたい場合は、ブラウザーをリダイレクト2コードでプッシュするため、R=302フラグは不要です。基本的に、あなたがしたいことは、適切な場所へのURLをmaskだけにすることです。

(私の思考の流れを蹴ったものを提供してくれた@closetnocへのクレジット)

3
Matthew Lutz

これを試して:

RewriteCond %{HTTP_Host} ^mydomain\.com$ [NC,OR]
RewriteCond %{HTTP_Host} ^www\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://my-new-domain.com/$1 [R=301,L]

あなたの質問からあなたのRewriteRuleは根本的に間違っています:

RewriteRule ^/?$ "http\:\/\/domain1\.com\/\?parameter\=value" [R=301,L]

私の例は、古いドメインから要求とパラメーターを取得して新しいドメインに転送する一般的なブランケットリダイレクトです。

あなたの場合、http\:\/\/domain1\.com\/\?parameter\=valueはエスケープ(バックスラッシュを使用)または引用符で囲む必要はありません。私の例の^(.*)$ http://my-new-domain.com/$1は、(.*)から値を取得します。これは、ディレクトリパス、ファイル、および任意のパラメーターで構成されるURIであり、新しいドメインを使用して新しい要求の最後に配置します$1

したがって、www.old-domain.com/eagle-brand/products.php?type=foodに対する要求はwww.new-domain.com/eagle-brand/products.php?type=foodになります。

1
closetnoc