云虚拟主机配置.htaccess实现单机多站点
材料准备: 域名两个或两个以上,虚拟云主机一台(本教程使用的是阿里云虚拟云主机,Linux版本操作系统)
准备完成后,我们开工
- 到
域名注册商
的云解析页面
,为域名设置解析,解析到虚拟云主机的ip地址
添加记录
a.com
和b.com
解析到同一台虚拟主机
记录类型 | 主机记录 | 解析路线 | 记录值 | MX优先级 | TTL |
---|---|---|---|---|---|
A | www | 默认 | 虚拟云主机的ip地址 | - | 10分钟 |
A | @ | 默认 | 虚拟云主机的ip地址 | - | 10分钟 |
PS:设置解析一般需要一段时间可以生效,不同供应商可能存在差异。
- 到
虚拟主机管理面板
设置域名绑定
将刚刚第一步设置解析的域名都填写上来,实现主机
和域名
的双向绑定
。
这个时候,如果刚刚设置的域名解析生效的时候,访问两个域名,会发现打开的是同一个页面(当然如果你未备案的话,可能也是同一个未备案的页面[白眼])。
我们连接到ftp上应该是一个这样的目录结构,htdocs
是网站的目录。
为了测试一下可以先随便写一个index.html
页面,然后ftp连接到虚拟主机
,把index.html
扔进htdocs
。然后在分别打开a.com
和b.com
查看。
- 删除了index.html, 在
htdocs
目录下,用域名作为文件名,分别创建两个目录
可以在两个目录下,分别新建一个index.html
a.com/index.html
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>我是a.com</title>
</head>
<body>
<h1>你好!我是a.com</h1>
</body>
</html>
b.com/index.html
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>我是b.com</title>
</head>
<body>
<h1>你好!我是b.com</h1>
</body>
</html>
现在本地使用sublime
或其他编辑器创建一个文件名为.htaccess
的文件
# a.com --------------------------------start---
<IfModule mod_rewrite.c>
# 关闭目录列表
Options -Indexes
RewriteEngine on
# 预设页面
DirectoryIndex index.html index.htm index.php
RewriteCond %{HTTP_HOST} ^a.com[NC]
RewriteCond %{HTTP_HOST} ^www.a.com[NC]
RewriteRule ^(.*)$ http://a.com/$1 [L,R=301]
# 将域名绑定在特定的目录当中。a.com就是刚刚建立的文件目录
RewriteCond %{HTTP_HOST} ^(www.)?a.com$ [NC]
RewriteRule ^(.*)$ /a.com/$1 [L]
</IfModule>
# a.com ----------------------------------end---
# b.com --------------------------------start---
<IfModule mod_rewrite.c>
# 关闭目录列表
Options -Indexes
RewriteEngine on
# 预设页面
DirectoryIndex index.html index.htm index.php
RewriteCond %{HTTP_HOST} ^b.com[NC]
RewriteCond %{HTTP_HOST} ^www.b.com[NC]
RewriteRule ^(.*)$ http://b.com/$1 [L,R=301]
# 将域名绑定在特定的目录当中。b.com就是刚刚建立的文件目录
RewriteCond %{HTTP_HOST} ^(www.)?b.com$ [NC]
RewriteRule ^(.*)$ /b.com/$1 [L]
</IfModule>
# b.com ----------------------------------end---
具体规则代码如上,大致就是判断你是从哪一个域名访问到虚拟主机
如果是a.com
,那么就重定向到a.com
这个目录的index.html
如果是b.com
,那么就重定向到b.com
这个目录的index.html
- 最后需要再写两个
.htaccess
文件
分别如下
.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /a.com/
</IfModule>
这个放到a.com
目录下
.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /b.com/
</IfModule>
这个放到b.com
目录下
这个是PHP环境下的方法,如果是IIS环境下的话,可以参考一下这篇(虽然我没有试过
)
参考: