
ドメイン全体を別のドメインにリダイレクトする方法については多くの情報がありますが、ドメインを 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 ディレクティブを使用する必要がありますdomain1
。domain2
エラー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) に対して繰り返す必要があります。