我有一个从旧域名(例如olddomain.com)迁移到新域名(例如newdomain.com)的网站。
对于search引擎优化的原因,我需要重写所有的网站stream量主要新的域名(如www.newdomain.com)。 不幸的是,我不知道如何添加多个ORtypes的重写条件。 看来,所有的条件,下面的示例代码,我得到一个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>
有人可以给我一点帮助吗? 任何帮助将不胜感激。
尽pipe事实上你已经find了解决scheme,但是我仍然会把它作为你的最佳select。
解决scheme#1 :在原始代码的前2个RewriteCond行中用[NC,OR]replace[NC] 。 默认情况下,一个RewriteCond通过逻辑AND链接到另一个RewriteCond。 这将指示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]
解决scheme#2 :由于您一共只有4个域名,使用相反的方法将会容易得多 – 从任何域redirect除了正确的:
RewriteCond %{HTTP_HOST} !^www.newdomain.com [NC] RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,L,NC]
刚刚发现这个报价:
rewriteConds只适用于后面的单个rewriteRule。
这里: http : //www.webmasterworld.com/apache/3350200.htm
这是我的工作解决scheme:
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]