我有一个网站从旧域名(例如 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]
AND
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]
解决方案 #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]