Apache 重写多个条件

Apache 重写多个条件

我有一个网站从旧域名(例如 olddomain.com)迁移到新域名(例如 newdomain.com)。

出于 SEO 原因,我需要将所有网站流量重写到主要新域名(例如 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>

有人能帮我一下吗?任何帮助我都会非常感激。

答案1

尽管你已经找到了适合你的解决方案,我仍然会将其发布为你的解决方案远的达到最佳效果。

解决方案 #1:将原始代码的前 2 行 RewriteCond替换[NC]为。默认情况下,一个 RewriteCond 通过逻辑链接到另一个 RewriteCond 。这将指示 Apache 使用逻辑:[NC,OR]ANDOR

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

刚刚发现这句话:

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]

相关内容