当前位置:首页 > 建站技术 > 正文

如何在一台虚拟主机上建多个网站

发布时间:2016-09-24作者:张安林阅读:1503
现在,很多人都有自己的个人网站,作者也是从去年开始,打算做一些个人网站,来练习下作者跛脚的技术。因为资金的原因,作者就只购买了阿里云的虚拟主机,并且在一开始就打算在这台主机上建立多个网站,于是作者开始了人生的第一次独立自主建站过程。今天,作者要分享的,就是如何在阿里云的虚拟主机上建立多个网站,一步步往下看吧。

首先,作者选择虚拟主机的主要原因,就是因为不会Linux的各种配置,也不会命令,所以只能选这种最简单傻瓜式的。下面进入正题。

如果有做个大型网站的技术们应该都是,网站的核心代码一般都防止在网站web目录是上一层的,这样可以避免用户访问到核心文件,从而可以避免很多攻击。但是,在虚拟主机中,这个就不行了,因为服务商给的目录往往就是网站访问目录,你的所有代码都只能存到这个目录中去。一方面,这样会增大被攻破的风险,另一方面,也导致一个虚拟主机较难建立多个不同的网站。但是好在现在大多虚拟主机都支持Apache的.htaccess伪静态,所以我们可以利用这个来做到一个主机建立多个网站的目的。下面是步骤:
1、在虚拟主机根目录建立不同的文件夹,每个文件夹未来都是为不同的网站而准备的。
2、建立.htaccess文件,并把域名指向刚才建立的不同的文件夹,形如
RewriteCond %{HTTP_HOST} ^((www|m).)?zhanganlin.com$ [NC]
RewriteRule ^(.*)$ myblog/$1 [L]
经过这一步,就将所有访问我网站的URL,全部指向了myblog目录。
3、再在myblog文件夹中,建立.htaccess文件,里面写上如下代码:
#这个是禁止索引目录用的
Options All -Indexes
#这几个是用户访问URL中如果有myblog,或者域名不是我这个域名,会返回错误,避免用户访问真实路径和撺域名的问题
RewriteCond %{HTTP_HOST} !^(.+\.)?zhanganlin.com$ [NC]
RewriteCond %{REQUEST_URI} ^/myblog/ [NC]
RewriteRule . - [F,L]
#下面这些是自定的错误
RewriteCond %{HTTP_HOST} ^(.+\.)?zhanganlin.com$ [NC]
ErrorDocument 400 /error.php?code=400
ErrorDocument 401 /error.php?code=401
ErrorDocument 402 /error.php?code=402
ErrorDocument 403 /error.php?code=403
ErrorDocument 404 /error.php?code=404
#下面是核心了,所有的访问都指向了index.php文件
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
然后这个时候就可以在index文件中引用路由规则,判断不同的访问,包含不同的文件,就会返回给用户不同的内容了。这就实现了不同的域名进行区分的功能了,如果要做第二个网站,规则是一样的。

核心思想:
Apache提供了伪静态的功能,虚拟主机支持.htaccess文件,那么我们可以利用这个文件,对不同的域名进行判定,然后访问不同的文件,就可以实现一个虚拟主机建立多个网站的目的了。
所以大致思路是:
1、根目录建立一个.htaccess文件,主要作用是判断域名,把不同的域名访问放到不同的目录中去。
2、在目录中建立文件夹,然后对域名访问的页面URL进行判断,不同的URL返回不同的内容。
但是,这样做有些问题是需要面对的:
1、如果不做好子文件夹的.htaccess设置,用户URL路径中会多出目录文件夹名。
2、不同的域名可以相互访问彼此的内容。
这些问题自然是我们不希望看到的,所以,我们需要改一些规则(这也是独立主机完全不用考虑的地方,但虚拟主机就不行)。
1、当用户访问的URL中包含目录名时,可以设置禁止访问,也可以设置301跳转,但这个必须要在.htaccess中设置,网站代码中是无效的,因为可以跳过。
2、这个就限定下访问的域名,如果访问这个文件夹的域名不是规定的域名,就禁止访问。
上面两个问题,就是如下这个:
RewriteCond %{HTTP_HOST} !^(.+\.)?zhanganlin.com$ [NC]
RewriteCond %{REQUEST_URI} ^/myblog/ [NC]
RewriteRule . - [F,L]
第一行是限定域名,指如果不是这里指定的域名
第二行是访问的URL中第一级字符是否为myblog
第三行,如果上面两行,任意一个匹配成功的话,这一行的作用是禁止访问,直接返回错误。
这就是大致的思路,但有些时候一些其他的还需要多尝试和多思考,比如图片的访问,文件的访问,用户直接访问了真实代码源文件怎么办等等。后面如果有机会的话再分享好了。

作者两个个人网站,一个是 www.ubao8.com 一个是 www.zhanganlin.com 就是用这种方法建立在一个虚拟主机上面的,大家可以验证。不过这两个网站不是在一个时期建立的,所以他们的路由一块是完全不同的两种方式,后面有机会再讲讲路由一块。
本文为张安林原创,转载请注明出处 http://www.zhanganlin.com/jishu/10
SEO网站优化
建站技术
网站运营