2010-11-26 6 views
0

同じ.htaccessファイル内のさまざまなドメインをすべて含む301のリダイレクトが必要です。私は以下のように各ルールについてのRewriteCondを書くことができ、それが正常に動作します:RewriteRondの代わりにRewriteRule内のHTTP_HOSTを一致させる

RewriteCond %{HTTP_HOST} www.domain1.com [NC] 
RewriteRule old-url-1a.htm /new-url-1a [L,R=301] 

RewriteCond %{HTTP_HOST} www.domain1.com [NC] 
RewriteRule old-url-1b.htm /new-url-1b [L,R=301] 

RewriteCond %{HTTP_HOST} www.domain2.com [NC] 
RewriteRule old-url-2a.htm /new-url-2a [L,R=301] 

RewriteCond %{HTTP_HOST} www.domain2.com [NC] 
RewriteRule old-url-2b.htm /new-url-2b [L,R=301] 

しかし、私は非常に長く、繰り返し取得するすべての単一のURLのコードの2行を持っている必要があり、このメソッドを使用して(同じのRewriteCondが繰り返されます何度も)。 RewriteRuleディレクティブ自体からHTTP_HOSTに一致する方法はありますか? (概念的には)これらの線に沿って何か:

RewriteRule www.domain1.com/old-url-1a.htm /new-url-1a [L,R=301] 
RewriteRule www.domain1.com/old-url-1b.htm /new-url-1b [L,R=301] 

RewriteRule www.domain2.com/old-url-2a.htm /new-url-2a [L,R=301] 
RewriteRule www.domain2.com/old-url-2b.htm /new-url-2b [L,R=301] 

感謝。

答えて

1

ApacheのドキュメントはするRewriteRuleについてこう述べています。

一致していますか?

パターンは、ホスト名とポートの後ろ、およびクエリ文字列の前に、URLの部分と最初に一致します。 ホスト名、ポート、またはクエリ文字列と照合したい場合は、は、それぞれ%{HTTP_HOST}、%{SERVER_PORT}、または%{QUERY_STRING}の変数でRewriteCondを使用します。

しかし、あなたがapache-configの中にルールを入れることができるならば、別の簡略方法があります:あなたはRewriteMapを使うことができます。

RewriteMap  host-redirects txt:/etc/apache2/host-redirects.map 
RewriteRule ^/([^/]*).htm$ http://%{HTTP_HOST}/${host-redirects:%{HTTP_HOST}/$1|$1} [R,L] 

host-redirects.mapは次のようになります。

www.domain1.com/old-url-1a.htm /new-url-1a/ 
www.domain1.com/old-url-1b.htm /new-url-1b/ 
www.domain2.com/old-url-2a.htm /new-url-2a/ 
+0

感謝をしています!残念なことに私のシステム管理者は私にApacheの設定を変更させませんので、htaccess内の大規模なルールに頼らざるを得ません。 –

1

ところでマッピングは、「本当に一致しているものを」デバッグする唯一の方法かもしれ

をあなたは9にRewriteLogLevelを設定することができますログには、RewriteCondと解析される内容は表示されません。
代わりに、「一致した」かどうかが示されます。 あまり役に立たない

マップ(RewriteMap)を使用すると、ログにはどのキーが渡されたかが明確に示されます。 例:
(/var/log/http/rewrite.log) map lookup OK: map=host-redirects[txt] key=WHAT_IS_PARSED -> WHAT_IS_RETURNED
または
のRewriteRule、後に右の用語を使用して map lookup FAILED: map=host-redirects[txt] key=WHAT_IS_PARSED

|デフォルトの戻り値を指定します。
ほとんどの場合、デフォルトの404.htmlページかそれ以上です。 非常に有用。だからあなたのhttpd.confの

は、あなたのVirtualHostで
RewriteLog logs/rewrite.log RewriteLofLevel 9
を設定して、あなたはこれに私を導入するため:)

関連する問題