颜林林的个人网站

Linlin Yan's Personal Website

如何配置域名指向

2018-08-04 18:19

半年前,得一位小朋友提醒,我姓名全拼的com/net/cn域名,竟然都还未被注册,遂果断入手。现在,正好用于新版博客,很酷!

虽然自己接触网站技术很早,但一直都是在用现成平台(诸如各种个人博客空间、花生壳动态域名等),真正到从头部署域名,这竟然还是第一次。其间顺带学习些尚未完全过时的初级技术,并做此笔记。

域名解析配置

在域名申请网站的控制台页面中,可以对每个域名进行“解析”的配置。其中最主要的两种配置记录简介如下:

  • A记录:将某个子域名指向到目的IP地址。这里,填写二级域名的部分即可,也可以将该项空着:

    域名 记录 名称 指向 访问方式
    yanlinlin.cn A www 39.106.8.225 http://www.yanlinlin.cn/
    yanlinlin.cn A <空着> 39.106.8.225 http://yanlinlin.cn/
  • CNAME记录:相当于配置域名别名,将某个域名指向另一个域名:

    域名 记录 名称 指向 访问方式
    yanlinlin.com CNAME www yanlinlin.cn http://www.yanlinlin.com/
    yanlinlin.net CNAME www yanlinlin.cn http://www.yanlinlin.net/

总结起来,A记录相当于是域名指向关系的“原始”定义,其优势是可以允许填写的“名称”为空,从而用于定义一级域名(即域名中只有一个点的,如“yanlinlin.cn”)。而CNAME起到类似超链接的作用,多个不同域名可以指向同一个其他域名,这样一旦需要修改IP地址时,只需要修改后者的A记录,而其他域名的CNAME记录可以保持不变。而CNAME记录不允许填写“名称”为空,因而只能用于配置二级域名,而不能配置一级域名。

301转向配置

在配置上述域名指向后,同一个网站页面就会有多个不同网址可以访问。如果想将其他域名的访问都汇集起来,最终在用户浏览器上呈现为同一个网址(域名),则需要用到301转向配置。可以在apache系统配置上实现,也可以在页面目录的.htaccess文件中配置。

这里,我给出我在apache配置文件中的设定方法:

<VirtualHost *:80>
	ServerName www.yanlinlin.cn      # 主域名
	ServerAlias yanlinlin.cn         # 其他别名域名
	ServerAlias www.yanlinlin.com
	ServerAlias yanlinlin.com
	ServerAlias www.yanlinlin.net
	ServerAlias yanlinlin.net

    ...

	<Directory "/var/www/blog">
		RewriteEngine On             # 开启rewrite功能,后面是转向条件
		RewriteCond "%{HTTP_HOST}" "^yanlinlin.cn" [NC,OR]
		RewriteCond "%{HTTP_HOST}" "yanlinlin.(com|net)" [NC]
		RewriteRule ^(.*)$ http://www.yanlinlin.cn/$1 [L,R=301,NC]
	</Directory>
</VirtualHost>

两行RewriteCond是转向条件。其中:HOST_HOST是当前访问域名;NC表示判断忽略大小写;OR表示“或”条件,跟下一行的条件一起做判断。

最后一行RewriteRule是转向规则。这里用到了正则表达式,用于从原URL中提取字符串,并将其拼成新URL,实现转向。

配置完成后,需要开启rewrite模块,并重启apache:

a2enmod rewite
service apache2 restart