Apacheは複数の条件を書き換えます


9

古いドメイン名(olddomain.comなど)から新しいドメイン名(newdomain.comなど)に移行したWebサイトがあります。

SEOの理由から、すべてのWebサイトトラフィックをプライマリの新しいドメイン名(www.newdomain.comなど)に書き換える必要があります。残念ながら、複数のORタイプの書き換え条件を追加する方法がわかりません。以下のサンプルコードのすべての条件を使用すると、AND条件が発生するようです。

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName newdomain.com
        ServerAlias www.newdomain.com
        ServerAlias olddomain.com
        ServerAlias www.olddomain.com
        DocumentRoot /var/www/newdomain.com/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^olddomain.com [NC]
        RewriteCond %{HTTP_HOST} ^www.olddomain.com [NC]
        RewriteCond %{HTTP_HOST} ^newdomain.com [NC]
        RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

誰かが少し私を助けてくれますか?どんな助けでも大歓迎です。

回答:


16

あなたはすでにあなたの解決策のために機能していることがわかりましたが、あなたの解決策は最適ではないので、私はこれを投稿します。

溶液#1:交換[NC]することにより[NC,OR]、元のコードの第2のRewriteCond線です。デフォルトでは、あるRewriteCondは別のRewriteCondにlogicalによってリンクされていますAND。これは、ORロジックを使用するようにApacheに指示します。

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

解決策2:合計4つのドメイン名しかないため、反対のアプローチを使用する方がはるかに簡単です。正しいドメインを除いて、任意のドメインからリダイレクトします。

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

ソリューション#2は、より良いものですあなたが持っている場合にはかかわらwww.newdomain.comおよびtest.newdomain.comまたはそのような何か、それは照合する方がよいかもしれません!newdomain.com$長い古いドメインが「thisisanoldnewdomain.com」のように「newdomain.com」で終わっていなかったとしてとして。#1の要点は、どこにも文書化された[OR]を見つけることができません。それは本当に機能しますか?
DerfK、2011

@DerfKのドキュメント -あなたはかなりスクロールする必要があります:「『ornext | OR』(または次の条件)を使用し、この地域のORの代わりに、暗黙のANDでルール条件を結合します。」
LazyOne

1

この見積もりを見つけました:

rewriteCondsは、それらに続く単一のrewriteRuleにのみ適用されます。

ここ:http : //www.webmasterworld.com/apache/3350200.htm

これが私の解決策です:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^olddomain.com [NC]
    RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

    RewriteCond %{HTTP_HOST} ^www.olddomain.com [NC]
    RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

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

1
数年後にここを訪れる他の人へのメモとして、上記のLazyOneによって提案された(およびOPによって受け入れられた)ソリューションは、特に2つまたは3つ以上の条件を組み合わせる場合、はるかに最適化されますOR
Doktor J
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.