现在的许多虚拟主机虽然支持多域名绑定,可是不提供子目录功能,所以只能建立一个站点,多个域名访问也都只能是同一个网站,这未免有点不够良心。但是如果你的主机用的是Apache,支持.htaccess文件配置的话(.htaccess知识补充),就能通过URL重写定向的方式实现不同域名默认访问不同目录,从而达到绑定多个域名不同网站的功能(首先要做好域名绑定主机和域名DNS解析)。比如我的另一个站点Pictree就是用这种方法,在本博客网站的虚拟机下建立的网站,本网站Airicy不受影响,把所有的摆设的停靠域都变成真正有用的附加域。另外我也用这方法做了个人页歡喜忧,实现了同一域名下带www和不带www做不同网站功能,代码略有不同,同理可为网站子域名创建子目录。可以说你的虚拟机能绑定多少网站,你就可以建多少个不同的网站,极大限度的突破主机商给你的以下限制。

※ 每个主机可绑定 3 个域名( www 不另计),1 个数据库,可建立 1 个网站

网上也有许多的教程例子,但是我都试过并不能较完美的实现,虽说网站主页能够访问,但是其引用的目录文件都不能访问,导致网页只能是单个首页,缺少css/js等文件。

所以我修改了部分代码得到以下第一个版本(为域名www.pictree.tk和pictree.tk绑定根目录下的Pic目录):

在网站根目录下的.htaccess文件里面添加

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www.)?pictree.tk$ [NC]
RewriteCond %{REQUEST_URI} !^/Pic/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /Pic/$1 [L]
RewriteCond %{HTTP_HOST} ^(www.)?pictree.tk$
RewriteRule ^(/)?$ /Pic/index.php [L]
</IfModule>

在Pic目录下的.htaccess文件里面添加

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.pictree.tk/$1/ [L,R=301]
#只许绑定的域名访问
RewriteCond %{HTTP_HOST} !^(www.)?pictree.tk$ [NC]
RewriteRule ^(.*)$ http://www.pictree.tk/$1 [L,R=301]
#对绑定目录下与 同名的目录的处理
RewriteCond %{REQUEST_URI} ^/Pic/$ [NC]
RewriteRule ^(.*)$ /%{REQUEST_URI}/%{REQUEST_URI}/$1 [L]
</IfModule>

由于通过规则绑定的站点访问资源需要添加demo目录作为路径,其根目录仍然为原来的根目录,因为根目录是原来默认不写规则绑定的网站,文件资源可能会穿插,这对网站建设还是有点不足。所以我自己学了点正则做了第二个版本:

在网站根目录下的.htaccess文件里面添加

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www.)?pictree.tk$ [NC]
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^(.*)$ /Pic/$1 [L]
</IfModule>

在Pic目录下的.htaccess文件里面添加

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www.)?pictree.tk$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /Pic/index.php [L]
#只许绑定的域名访问 www跳非www
RewriteCond %{HTTP_HOST} !^www.pictree.tk$ [NC]
RewriteRule ^(.*)$ http://www.pictree.tk/$1 [L,R=301]
#对绑定目录下与 同名的目录的处理
RewriteCond %{HTTP_HOST} ^(www.)?pictree.tk$ [NC]
RewriteCond %{REQUEST_URI} ^/Pic/$
RewriteRule ^(.*)$ http://www.pictree.tk/$1 [L,R=301]
</IfModule>

第二个版本更简单,同时解决了第一个版本的许多问题,不过由于对正则规则不够熟悉,这两个版本对同名目录处理还是有某些BUG不能解决(同名目录下的资源还是不能访问,只能访问index首页),虽然可以通过不建立同名目录或者资源来自别的目录来避免,希望以后能够想办法更完美的处理。

文件名称Airicy

更新日期

作者信息Airicy

文件大小

点击下载

查看演示

本文标签 : # #
分享到: