web-dev-qa-db-ja.com

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

古いドメイン名(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>

誰かが私に少し援助をしてもらえますか?どんな助けでも大歓迎です。

9
gurun8

あなたがすでにあなたの解決策のために機能していることがわかっているという事実にもかかわらず、私はあなたのものがfarであるので最適であるため、これを投稿します。

ソリューション#1:置換[NC] 沿って [NC,OR]元のコードの最初の2つのRewriteCond行。デフォルトでは、1つのRewriteCondが別のRewriteCondに論理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]
16
LazyOne

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

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
gurun8