Apache 虚拟主机配置 www 与非 www、重写还是 sServerAlias?

Apache 虚拟主机配置 www 与非 www、重写还是 sServerAlias?

我们有一个中央 httpd.conf,其中包含各种虚拟主机的配置。直到今天,我们实际上并不需要“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 会比另一个更好吗?

欢迎任何想法!

谢谢,

知识管理

答案1

我可能会同时做这两件事。例如:

<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>

注意:上述 David Zaslavsky 的解决方案或多或少做了同样的事情,但这样您不必为每个子域执行单独的 VirtualHost 部分。

答案2

我认为重写解决方案会变得更好 SEO-foo(好词 :-P),因为通常认为最好有一个规范域,每个人都会将一组特定内容发送到该域。换句话说,如果有两个不同的域从服务器产生相同的结果,则您的网站排名会在这两个域之间分裂,从而降低每个域的价值。(Google 允许您使用其网站管理员工具指定规范域,但这仅适用于 Google)

我认为你可以Redirect在这里使用,即

<VirtualHost *:80>
    ServerName www.subdomain.site.com
    Redirect permanent / http://subdomain.site.com/
</VirtualHost

这比调用 mod_rewrite 所需的计算量要小。

答案3

以下是对我有用的方法:

<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。

相关内容