Apache 仮想ホストでドメイン全体を別のドメインの単一ページにリダイレクトする

Apache 仮想ホストでドメイン全体を別のドメインの単一ページにリダイレクトする

ドメイン全体を別のドメインにリダイレクトする方法については多くの情報がありますが、ドメインを 2 番目のドメインの特定のページにリダイレクトする方法については回答された質問が見つかりません。私が設定したのは次のとおりです。

<VirtualHost *:80>
    ServerName www.domain2.org.uk
    ServerAlias domain2.org.uk domain1.co.uk www.domain1.co.uk
    DocumentRoot /var/www/html
    ErrorLog logs/mkt-error_log
    CustomLog logs/mkt-access_log common
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !domain1.co.uk$ [NC]
    RewriteRule ^(.*)$ https://www.domain2.org.uk/specific-page/ [L,R=301]
</VirtualHost>

これはリダイレクトしますが、domain2 のデフォルト ページのみにリダイレクトします。これを変更して特定のページに移動するにはどうすればよいでしょうか?

答え1

RewriteRule ^(.*)$ https://www.domain2.org.uk/specific-page/ [L,R=301]

これはすでに必要なことを実行し、リダイレクトしますすべてhttps://www.domain2.org.uk/specific-page/- に記載されているとおりRewriteRule 代替(ただし、RewriteRule パターン不必要に後方参照をキャプチャしています。

RewriteCond %{HTTP_HOST} !domain1.co.uk$ [NC]

ただし(これが例示したコードスニペットのタイプミスでない限り)、条件(ヘッダーHostないで終わるdomain1.co.uk)はリダイレクトループ(domain2.org.uk明らかにない domain1.co.ukなので、条件は常に満たされます。そして、次のRewriteRuleリダイレクトはすべて

条件パターンこのRewriteCond指令の は、次のいずれかの方法で変更する必要があります。

  • (否定) プレフィックスを削除します!。(ただし、末尾$にドットが付いている FQDN では、依然として問題が発生します。)
  • または、変更する!domain2\.org\.uk$

しかし...あなたは明らかにサーバーの設定にアクセスでき、仮想ホストコンテキストでは、実際には mod_rewrite をこれに使用すべきではありません。 用と 用に別の vhost を作成し、代わりに mod_alias ディレクティブを使用する必要がありますdomain1domain2エラーRedirectMatchが発生しにくくなり、効率が向上します。

例えば:

<VirtualHost *:80>
    ServerName domain1.org.uk
    ServerAlias www.domain1.org.uk
    RedirectMatch 301 ^ https://www.domain2.org.uk/specific-page/
</VirtualHost>

<VirtualHost *:80>
    ServerName domain2.org.uk
    ServerAlias www.domain2.org.uk
    DocumentRoot /var/www/html
    ErrorLog logs/mkt-error_log
    CustomLog logs/mkt-access_log common
</VirtualHost>

注意: これらの vhost は HTTP (ポート 80) 専用なので、当然、このリダイレクトを HTTPS (ポート 443) に対して繰り返す必要があります。

関連情報