Конфигурация виртуального хоста 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.

Другие вопросы по тегам