У меня есть веб-сайт, который перешел со старого доменного имени (например, olddomain.com) на новое доменное имя (например, newdomain.com).
По причинам SEO мне нужно переписать весь трафик веб-сайта на основное новое доменное имя (например, www.newdomain.com). К сожалению, я не знаю, как добавить несколько условий перезаписи типа ИЛИ. Кажется, что при всех условиях, пример кода ниже, я получаю условие И.
<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: Заменить [NC]
по [NC,OR]
в первых двух строках исходного кода 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]
Решение # 2: Так как всего у вас всего 4 доменных имени, будет намного проще использовать противоположный подход - перенаправление с ЛЮБОГО домена, кроме правильного:
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
Вот рабочее решение для меня:
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]