2010-12-30 7 views
8

私はリダイレクトするドメインのリストを持つリライトマップを持っています。現在、私はwww.foo.comとfoo.comをリライトマップに記載しなければなりません。同じ行にwwwとnon-wwwの両方のリライトチェックを行う方法があるかどうか疑問に思っていました。 rewritecondでwwwとnon-wwwをどのように一致させることができますか?

# Rewrite Map 
foo.com file.php 
www.foo.com file.php 

# modrewrite 
RewriteCond ${domainmappings:%{HTTP_HOST}} ^(.+)$ [NC] 
RewriteCond %1 !^NOTFOUND$ 
RewriteRule ^.*$ www.domain.com/%1 [L,R=301] 

は、私が(WWW。)%{HTTP_HOST}または^(WWW。)%{HTTP_HOST}が、運のようなものをやってみました。

答えて

15

これはそれを行う必要があります。

RewriteCond %{HTTP_HOST} ^(www\.)?(.+) 
RewriteCond ${domainmappings:%2} ^(.+)$ [NC] 
RewriteRule^/%1 [L,R=301] 

最初RewriteCondはオプションwww.プレフィックスを削除します。残りは、第2のRewriteCondの書き換えマップのパラメータとして使用されます。

キーが見つかった場合は、マップ機能の構築物はSubstValueにより置換されている:一致が見つからない場合

プレーンテキストファイルの書き換えマップは空の文字列を返します。キーが見つからない場合は、DefaultValueで置換されます。または、DefaultValueが指定されていない場合は空文字列に置き換えられます。第2の条件が満たされた場合

だからマッチが発見された、( ^(.+)$注意)と %1(この場合 file.phpで) SubstValueが含まれています。

+0

私はまだwww.foo.comとfoo.comのエントリを持っていなければならないので動作しません。私はfoo.comのエントリだけを持っています。 – Scott

+0

@Scott Foster:これが修正されました。 – Gumbo

+0

ほぼあります。 www.foo.comとfoo.comの両方が適切な場所に移動しますが、ブラウザはブラウザが終了するまでリダイレクトし続けます。どんな考え? – Scott

5
ここにポストから

http://www.eukhost.com/forums/f15/simple-rewriterule-set-redirect-domain-6570/

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^xyz.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.xyz.com$ 
RewriteRule ^(.*)$ http://www.xyz.com/test//$1 [R=301,L] 
+0

問題は私がドメインをたくさん持っていて、リライテッドまたはリライトでxyz.comを持つことができないことです。 – Scott

+0

また、私はrewritemapのfoo.comのバージョンにマッチするようにしたいので、部分文字列のようなことをしなければならないでしょう。 – Scott

0

あなたは、WWWを作ってみることができます。以下ではオプションパーツ:これは最初のwww.anything.anythinganything.anythingをリダイレクトし、次のリクエストに応じて、ルールを適用する

# Rewrite Map 
www.foo.com file.php 

# modrewrite 

# redirect to www domain always 
RewriteCond %{HTTP_HOST} ^([^.]+\.[^.]+)$ 
RewriteRule (.*) http://www\.%1/$1 [L,R=301,QSA) 

# redirect following the map 
RewriteCond ${domainmappings:%{HTTP_HOST}} ^(.+)$ [NC] 
RewriteCond %1 !^NOTFOUND$ 
RewriteRule ^.*$ www.domain.com/%1 [L,R=301] 

。しかし、保証はありませんが、書き直しマップにはそれほど知識がありません。

0
RewriteCond %{HTTPS} off 

RewriteCond %{HTTP_HOST} ^domain.com$ [OR] 

RewriteCond %{HTTP_HOST} ^www.domain.com$ 

RewriteRule^https://www.domain.com%{REQUEST_URI} [R=301,L] 
+0

引用:_同じ行にwwwとnon-wwwの両方のリライタチェックを行う方法があるかどうか疑問に思っていました。 –

関連する問題