У нас есть центральный httpd.conf, и мы включаем confs для различных виртуальных хостов. До сегодняшнего дня у нас действительно не было необходимости в доменах «www.subdomain.site.com», а только в «subdomain.site.com». Теперь мы это делаем, поэтому я пытаюсь выяснить, какой из этих двух подходов лучше:
[1]. Используйте перезапись:
RewriteCond %{HTTP_HOST} ^www.subdomain.site.com
RewriteRule ^(.*)$ http://subdomain.site.com$1 [R=301]
ИЛИ
[2]. Используйте ServerAlais:
<VirtualHost 111.22.33.44:80>
ServerName subdomain.site.com
ServerAlias www.subdomain.site.com
Include conf/subdomain.conf
</VirtualHost>
Я предполагаю, что Rewrite подвергается дополнительной обработке, но не уверен, как ServerAlias будет вести себя в этом сочетании. У одного SEO foo лучше, чем у другого?
Любые идеи приветствуются!
Спасибо,
Км
Я предполагаю, что решение для переписывания станет лучше SEO-foo (приятный термин :-P), поскольку обычно считается лучшим иметь один канонический домен, на который всех отправляют для определенного набора контента. Другими словами, наличие двух разных доменов, которые дают одинаковые результаты на сервере, может разделить рейтинг вашего сайта между двумя доменами, уменьшив ценность каждого из них. (Google позволяет указать канонический домен с помощью инструментов для веб-мастеров, но это работает только в Google)
Я думаю, вы действительно можете использовать Redirect
здесь, т.е.
<VirtualHost *:80>
ServerName www.subdomain.site.com
Redirect permanent / http://subdomain.site.com/
</VirtualHost
Это менее требовательно к вычислениям, чем вызов mod_rewrite.
Я бы, наверное, сделал и то, и другое. Примерно так:
<VirtualHost 111.22.33.44:80>
ServerName subdomain.site.com
#Using Wildcard: might as well handle any variation
#such as ww.subdomain.site.com (remember to set this in DNS too)
ServerAlias *.subdomain.site.com
RewriteEngine On
#Change all variations to the Canonical hostname for SEO.
RewriteCond %{HTTP_HOST} !^subdomain.site.com [NC]
RewriteRule ^/(.*)$ http://subdomain.site.com/$1 [R=301]
Include conf/subdomain.conf
</VirtualHost>
Примечание: решение Дэвида Заславского, приведенное выше, делает более или менее то же самое, но в этом случае вам не нужно создавать отдельный раздел VirtualHost для каждого поддомена.
Вот что мне подходит:
<VirtualHost *:80>
ServerName www.domain.com
ServerAlias domain.com
# [ snip some unrelated stuff ]
# Redirect secondary hostnames to canonical hostname
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule (.*) http://www.domain.com$1 [R=301,L]
</VirtualHost>
Преимущество этого вместо RedirectMatch состоит в том, что он перенаправляет domain.com/about-us на www.domain.com/about-us вместо того, чтобы просто перенаправлять каждый запрос на домашнюю страницу. Он также использует редирект 301, который переводит рейтинг поисковой системы с domain.com/about-us на www.domain.com/about-us.