我们有一个中央 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。