Apache 重写多个条件

gur*_*un8 11 mod-rewrite apache-2.2

我有一个从旧域名(例如 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>
Run Code Online (Sandbox Code Playgroud)

有人可以给我一点帮助吗?任何帮助将不胜感激。

Laz*_*One 17

尽管您已经找到了适合您的解决方案,但我仍然会发布它,因为您的解决方案远非最佳。

溶液#1:替换[NC]通过[NC,OR]在原始代码中的第一个2个的RewriteCond行。默认情况下,一个 RewriteCond 通过逻辑链接到另一个 RewriteCond AND。这将指示 Apache 使用OR逻辑:

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]
Run Code Online (Sandbox Code Playgroud)

解决方案#2:由于您总共只有 4 个域名,因此使用相反的方法会更容易 - 从任何域重定向,除了正确的一个:

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