apache域名重定向

需求

把www.abc.com 301重定向成 abc.com

  1. 为了SEO,任何一个域名 www和不带www的都应该301到其中一个,
    这样能传递权重,而且不至于造成重复内容的不同URL
  2. abc.com对移动端更友好。容易输入。

解决

百度之 apache htaccess 301。
有文章
有工具

总结下步骤

1. 确保apache 有安装rewrite模块,并且开启。
2. VirtualHost 有设置 AllowOverride All 
3. .htaccess文件正确编写
    RewriteEngine On
    RewriteCond %{http_host} ^www.abc.com$ [NC]
    RewriteRule ^(.*)$ http://abc.om/$1 [R=301,L]

如果一切正常,我可以很愉快地完成任务了。
!!!但是居然没有生效。。

原因

我有三个VirtualHost,配置的域名分别是aaa.com、bbb.com、ccc.com
当我访问www.bbb.com时,每次都会跳转到aaa.com。
查dns,对比配置文件,都没有问题呀。
突然灵机一动。
是不是www.bbb.com在虚拟host里找不到对应的配置文件,所以自动匹配了按字母序排第1的aaa.com呢?

试一下,去掉aaa.com。
访问www.ccc.com跳转到了bbb.com。
验证成功。

最终解决

分别为几个域名添加www的别名。如
ServerName aaa.com
ServerAlias *.aaa.com

然后愉快地完成了任务。

总结

知识缺乏。
vhosts配置文件
匹配规则

缺乏的知识点有:

1. ServerName是访问域名,ServerAlias提供的访问别名都会重定向到ServerName
2. 匹配规则:
    1. 有提供ip地址的优先级最高。(ps:ip地址一般用来区分内网和外网访问)
    2. 匹配到了域名
    3. 没有匹配到域名,第一个匹配到了端口号的生效。
Tags: