2010-12-30 9 views
0

私は1つのドメインに移動したいドメインの束を持っていますが、そのドメインのさまざまな部分です。マッピングファイル内の特定のドメインのmod_rewrite

# this is what I currently have 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^.*\.?foo\.com$ [NC] 
RewriteRule ^.*$ ${domainmappings:www.foo.com} [L,R=301] 

# rewrite map file 
www.foo.com www.domain.com/domain/foo.com.php 
www.bar.com www.domain.com/domain/bar.com.php 
www.baz.com www.domain.com/other/baz.php.foo 

問題は、各ドメインをRewriteCondの一部にする必要はないということです。私は試しました

RewriteCond %{HTTP_HOST} ^www\.(.*) 
RewriteRule (.*) http://%1/$1 [R=301,L] 

しかし、それはすべてのドメインのためにそれを行います。マッピングファイル内のドメインのみをリダイレクトし、マッピングファイル内のどのドメインとも一致しない場合は、他のリライトに移行します。

答えて

0

あなたは正しい方向にあります。あなたがしなければならないことは、キャッチオールを持つように、マップ上のパイプ演算子を使用することです。

RewriteCond ${domainmappings:%{HTTP_HOST}|NOTFOUND} ^(.+)$ 
RewriteCond %1 !^NOTFOUND$ 
RewriteRule ^.*$ ${domainmappings:%1} [L,R=301] 

ホストがリストにない場合、2番目の条件は一致しません。あなたはまだwww接頭辞と大文字と小文字を一致させる必要がありますが、あなたはその考えを得ています。

0

私は大文字と小文字が一致していると分かりましたが、wwwの接頭辞はわかりません。下の最初のものを使用すると、wwwなしで動作します。私が2番目のものを使うと、それはwwwと一緒に働きます。私が両方を使用する場合 - どちらも動作しません。

RewriteCond %{HTTP_HOST} (.*)$ [NC] # works for without www 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] # works with www 
RewriteCond ${domainmappings:%1|NOTFOUND} ^(.+)$ [NC] 
RewriteCond %1 !^NOTFOUND$ 
RewriteRule ^.*$ ${domainmappings:%1} [L,R=301] 

関連する問題