在apache下创建多个站点 在httpd.conf中使用以下内容 NameVirtualHost 211.161.197.119 <VirtualHost 211.161.197.119> ServerName bug.54ncr.com DocumentRoot /www/http/mantisbt </VirtualHost> <VirtualHost 211.161.197.119> ServerName mycity.54ncr.com DocumentRoot /www/http/billing_system </VirtualHost>
=================================================================
php
ServerAlias:服务器别名,在Apache中能够用于设置虚拟主机接收到个域名,也能够用于接收泛解析的域名。具体的设置方法以下:html
1、用于设置虚拟主机接收多个域名thinkphp
一个虚拟主机经常会接收多个域名解析,好比:一个虚拟主机要同时介绍fke.la,54ncr.com两个域名,或者是两个二级域名,如:www.fke.la, www1.fke.la,对于这种状况,能够在用ServerAlias轻松作到,打开apache的设置文件:httpd.conf,在该主 机的设置代码中:apache
<VirtualHost 192.168.1.12>服务器
ServerName “fke.la” #默认域名;app
ServerAlias 54ncr.com www1.fke.la #不一样域名用空格隔开;dom
DocumentRoot “D:\wwwroot\fke.la”ide
<Directory “D:\wwwroot\fke.la”>网站
Options Indexes FollowSymLinksspa
AllowOverride all
</Directory>
</VirtualHost>
保存httpd.conf文件,重启apche便可生效。
2、 用于接收泛域名解析
一个虚拟主机是能够接收泛域名解析的,也是经过SeverAlias选项设置,经过设置该选项不只能够接收二级泛域名解析,也能够接收三级、四级泛 域名解析,具体设置以下:
<VirtualHost 192.168.1.12>
ServerName “fke.la” #默认域名;
ServerAlias *.fke.la #用*表示泛域名,若是要接收三级泛域名解析,能够写成这样:*.my.fke.la;
DocumentRoot “D:\wwwroot\fke.la”
<Directory “D:\wwwroot\fke.la”>
Options Indexes FollowSymLinks
AllowOverride all
</Directory>
</VirtualHost>
保存httpd.conf文件,重启apche便可生效。
=================================================================
在DNS服务器上添加一条A记录。其中,“主机名”填写“*” ,“指向”填写为本身网站的服务器IP。这样全部
*.yourdomain.cn 都指向本身网站的服务器IP 因此无论你申请什么名字,如:dlzok.yourdomain.cn 都解析到这个IP上。最主要的是apache的配置了。
将全部的虚拟主机段先删除,加入
ServerName local
ServerAlias *
UseCanonicalName OFF
VirtualDocumentRoot D:/www/%1
ServerName在这里不起做用,ServerAlias会将域名解析到D:/www下对应的目录,这样就不用每次都修改httpd.conf文件 了。
须要注意的是使用VirtualDocumentRoot指令须要加载mod_vhost_alias模块,
去掉包含mod_vhost_alias行对应的LoadModule和AddModule前面的"#",restart一下apache就OK了
试了一下,果真很爽,可使用
VirtualDocumentRoot /www/%2+
来实现泛解析,不过无论什么二级域名都被解析到根目录了,也就是说
*.yourdomain.com 会被指向 /www/yourdomain.com
为了解决这个问题,能够用
VirtualDocumentRoot /www/%2+/%0
来实现二级域名分目录,即
www.yourdomain.com 会被指向 /www/yourdomain.com/www.yourdomain.com
test1.yourdomain.com 会被指向 /www/yourdomain.com/test1.yourdomain.com
test2.yourdomain.com 会被指向 /www/yourdomain.com/test2.yourdomain.com
有点不足,这样,www.yourdomain.com 也须要在yourdomain.com目录下再建一个目录了,要是www能到根目录,其余二级域名到二级目录就行了,不过也好,这样规范点。
主要是如下这2句,不再用一个个绑域名了,只须要创建对应域名的目录
UseCanonicalName Off
VirtualDocumentRoot /www/%2+/%0
==============================================================
1、使用 mod_vhost_alias
1. 简单的动态虚拟主机
# 从 Host: 头中取得服务器名字 Server Name
UseCanonicalName Off
# 这里的日志格式,能够在未来经过第一个参数域来分隔不一样的虚拟主机的日志
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
# 在返回请求的文件名的路径中包含进服务器名字: server name
VirtualDocumentRoot /www/hosts/%0/docs
VirtualScriptAlias /www/hosts/%0/cgi-bin
2. 更为有效的基于 IP 地址的虚拟主机
# 从 IP 地址反解析获得服务器名字(server name)
UseCanonicalName DNS
# 在日志中包含 IP 地址,便于后续分发
LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
# 在文件路径中包含 IP 地址
VirtualDocumentRootIP /www/hosts/%0/docs
VirtualScriptAliasIP /www/hosts/%0/cgi-bin
2、使用 mod_rewrite
1. 使用 mod_rewrite 实现简单的动态虚拟主机
# 从 Host: 头获取服务器名字
UseCanonicalName Off
# 可分割的日志
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
# ExecCGI is needed here because we can't force
# CGI execution in the way that ScriptAlias does
Options FollowSymLinks ExecCGI
# 接下来是关键部分
RewriteEngine On
# a ServerName derived from a Host: header may be any case at all RewriteMap lowercase int:tolower
## 首先处理普通文档:
# 容许变名 /icons/ 起做用 - 其余变名类同
RewriteCond %{REQUEST_URI} !^/icons/
# 容许 CGIs
RewriteCond %{REQUEST_URI} !^/cgi-bin/
# 开始“变戏法”
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1
## 如今处理 CGIs - 咱们须要强制使用一个 MIME 类型
RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-cgi]
# 好了!
2. 使用独立的虚拟主机配置文件 vhost.map
vhost.map 文件包含了相似下面的内容:
www.customer-1.com /www/customers/1
www.customer-2.com /www/customers/2
# ...
www.customer-N.com /www/customers/N
http.conf 包含了:
RewriteEngine on
RewriteMap lowercase int:tolower
# 定义映像文件
RewriteMap vhost txt:/www/conf/vhost.map
# 和上面的例子同样,处理变名
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{REQUEST_URI} !^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
# 这里作基于文件的从新映射
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/docs/$1
RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/cgi-bin/$1
浏览:1710 发布日期:2013/09/13 分类:技术分享 关键字: 自定义子域名
若是你的网站有会员,但愿每一个会员均可以用一个个性的子域名来显示他的主页,怎么处理啊?
这里提供一种 理论上无限制任何会员数量的解决方式,固然得要你的服务器和域名支持
第一:你的域名须要支持泛解析
第二:你的服务器必须支持绑定泛解析域名
固然这两种状况不能知足的状况下也不是不能解决,只是没那么强大和方便(好比你就固定解释指定几个子域名,而后服务器固定绑定几个子域名,这个是这里介绍方法中的特殊状况,就比如我说任何数乘以0都等于0,你说0乘以也等于0同样的道理)
行了,别废话了,直接上代码:
一、入口文件
二、默认模块的默认操做:
三、.htacees文件的写法固然不少细节的地方还要去考虑,好比第二步中的 subDomain中不存在的状况下应该怎么处理这里只是提供一种思路,若是您有更好的方式,也但愿您不要吝啬,一块儿分享给你们