apache对域名的泛解析

不少网站都开通blog功能。当今也比较流行的,我在CU上也注册了一个如:chenwenming.cublog.cn 注册完后,地址栏输入:http://chenwenming.cublog.cn 后自动转到blog.chinaunix.net/u1/40226/立马就生效了,当时感受很奇怪,通常域名生效起码等2个小时后才能生效。后来查了相关资料,原来是域名的泛解析.
在DNS服务器上添加一条A记录。其中,“主机名”填写“*” ,“指向”填写为本身网站的服务器IP。这样全部
*.cublog.cn 都指向60.28.166.87 因此无论你申请什么名字,如:chenwenming.cublog.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了

apache

试了一下,果真很爽,可使用服务器

VirtualDocumentRoot /www/%2+app

来实现泛解析,不过无论什么二级域名都被解析到根目录了,郁闷!也就是说
*.21andy.com 会被指向 /www/21andy.com网站

再想一想,因而,能够用spa

VirtualDocumentRoot /www/%2+/%0.net

来实现二级域名分目录,即
www.21andy.com 会被指向 /www/21andy.com/www.21andy.com
test1.21andy.com 会被指向 /www/21andy.com/test1.21andy.com
test2.21andy.com 会被指向 /www/21andy.com/test2.21andy.comunix

有点不足,这样,www.21andy.com 也须要在21andy.com目录下再建一个目录了,要是www能到根目录,其余二级域名到二级目录就行了,不过也好,这样规范点,呵呵rest

主要是如下这2句,不再用一个个绑域名了,只须要创建对应域名的目录日志

UseCanonicalName Off
VirtualDocumentRoot /www/%2+/%0orm

==============================================================

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 onRewriteMap 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/$1RewriteCond %{REQUEST_URI} ^/cgi-bin/RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$RewriteCond ${vhost:%1} ^(/.*)$RewriteRule ^/(.*)$ %1/cgi-bin/$1