为了图个方便,小子的博客一直使用的cPanel面板的国外主机(具体的那家就不再啰嗦了),流量不是太大,写个博客足够了,所以一直没有像有些朋友写个博客搞台vps。
当然,出于长期使用cPanel面板主机的缘故吧,有了便宜的推广虚机,小子还是会去关注一下的,不过一般也只是关注而已了。

话归原题,本文要说的是使用apache服务器的.htaccess文件实现子目录的绑定与域名绑定。

首先是子目录。写此文初衷是为了解决去年在hostable的“脸书”得到的无限空间两年,这个可能知道的人少一些(在此之前有0.99美元三年的,我也买了,到14年过期,此机为两年,到13年),因为空间闲置,而且不像hostable的0.99刀三年的无限主机,什么都是无限,这个空间虽容量、流量无限制,却限定绑定一个域名,最近没事想拿出来折腾一下,发现限制的很不爽,具体这里不再啰嗦。下面直接提出突破方法。

没什么“违纪”行为,都是原始功能,因为限制是一个附加域、一个暂停域和一个子域,相信大多数朋友用无限空间都习惯于添加附加于,但附加于每添加一个都相对于主域增加一个二级域名,这样你可怜的一个二级域名也会被用掉,所以,这里我们抛弃附加域,使用暂停域,不同的是绑定暂停域只是将域名和主域名绑定到相同的根目录,这样不会产生子目录。下面我们添加子目录。子目录名称填写为“*”,路径和主路径一样。这样使用认识前缀的子目录名都可以访问根目录了,是不是很爽呢?当然,不排除有些cPanel主机不支持泛域名绑定,也就是“*”的绑定(也不在我们讨论范围)。

绑定完成了,就是进入域名管理面板解析了,当然解析也要用“*”的泛解析,可能很多域名商并没有提供泛解析的支持,这里推荐修改ns服务器到dnspod,小子使用的就是dnspod的免费服务,好像去年升级后D大已经重新开启了泛域名的支持了。

这样下来,相信很多朋友都知道该怎么操作了。没错,新建或者修改根目录的“.htaccess”文件。这之间小子还遇到一点小问题,也与大家分享了。就是在cPanel的在线文件管理界面(最近喜欢在线编辑)看不到“.htaccess”文件,不知道原因,可能是idc为了限制大家修改或者其他原因吧,总之这个限制难不倒咱们。如果原先有必须使用的内容,就之间ftp客户端下载了修改再覆盖,如果没有实际应用的内容就之间新建后覆盖。

重点就是,内容该怎么写,下面详细的为大家分析了下。总体来说有四个部分。

# 开启功能
RewriteEngine on

# 你要绑定的二级域名 ,blog.poorren.com为要指定转向的二级域名
RewriteCond %{HTTP_HOST} ^(blog.)?poorren.com$

# 把那个子目录指向要绑定的二级域名
# 这里以子目录blog目录为例,两个出现blog的地方为要指定的二级目录
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /blog/$1

#这里改成要绑定的二级域名和要绑定的子目录
RewriteCond %{HTTP_HOST} ^(blog.)?poorren.com$ #此处依然是二级域名,和第二部分二级域名对应
RewriteRule ^(/)?$ blog/index.php [L] #此处是二级目录以及下面的主页文件。
这里等同于是绑定的同时指定了首选主页,其实可以不用指定,该句直接写为
RewriteRule ^(/)?$ blog/ [L]
需要注意的是,如果不指定首页,目录名后面必须跟上”/”,不然绑定就会出现问题。

以上几步操作结束,绑定域名就完成了,这样下来,“.htaccess”里面指定过的二级域名会根据规则转向,而没有指定的则会直接访问到主页,在一定程度上也避免了二级域名输错导向404错误页的情况。

下面就说一下绑定域名,当然,如果你的主机没有域名绑定的限制,上面二级域名的绑定也不会看,更不会看本部分了,这里只针对有需要的朋友,这其实是和gae、sae等不支持域名绑定的开发者空间绑定域名一个道理。没错,就是apache的反向代理。

也不再赘述了,这个操作就是首先把你要绑定不同域名的网站放在某个子目录中,然后绑定任意子目录名称,然后,然后就是找个支持反向代理的空间(测试使用了我的博客主机来做反向代理),绑定域名,在绑定的目录下新建或者修改“.htaccess”文件(有些cPanel主机绑定域名后会自动生成.htaccess)。

在文件中添加如下规则
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ http://blog.poorren.com/$1 [P]
这样就可以将某个域名指向到上一步绑定的子目录中了,这样基本就算是突破cPanel主机绑域名限制了吧!
当然,如果使用的是ng的服务器也可以,而且更由于apache
ng的主机就使用下面方法,在配置文件中加入
location / {
rewrite ^/(.*)$ http://blog.poorren.com/$1;
}

2014.01.02晚更新:应子曰去哪提议,补充下,cPanel下看不到隐藏文件的时候可能没有选显示隐藏文件,勾选上即可。