Конфигурация виртуального хоста Apache www против non-www, переписать или sServerAlias?
У нас есть центральный 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 лучше, чем другой?
Любые идеи приветствуются!
Спасибо,
KM
3 ответа
Я бы, наверное, сделал и то и другое. С чем-то вроде:
<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 для каждого субдомена.
Я полагаю, что решение для переписывания становится лучше SEO-foo (хороший термин:-P), поскольку обычно считается, что лучше всего иметь один канонический домен, на который все отправляются для определенного набора контента. Другими словами, наличие двух разных доменов, которые дают одинаковые результаты с сервера, может разделить рейтинг вашего сайта между двумя доменами, уменьшая ценность каждого из них. (Google позволяет указывать канонический домен с помощью Инструментов для веб-мастеров, но это работает только в Google)
Я думаю, что вы можете использовать Redirect
здесь, т.е.
<VirtualHost *:80>
ServerName www.subdomain.site.com
Redirect permanent / http://subdomain.site.com/
</VirtualHost
Это требует меньше вычислительных ресурсов, чем вызов mod_rewrite.
Вот что работает для меня:
<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.