标题:apache域名泛解析 出处:北京SEO_北京SEO培训 - 【元创SEO】 时间:Tue, 06 Jan 2009 18:42:22 +0000 作者:元创 地址:http://www.yuan-chuang.cc/read.php/82.htm 内容: apache对域名的泛解析 泛域名解析是指将*.域名解析到同一IP。 在域名前添加任何子域名,均可访问到所指向的WEB地址。也就是客户的域名achuan.net之下所设的*.achuan.net全部解析到同一个IP地址上去。 在DNS服务器上添加一条A记录。其中,“主机名”填写“*” ,“指向”填写为自己网站的服务器IP。这样所有 *.achuan.net都指向222.222.222.222 所以不管你二级名是什么,如:ooo.achuan.net都解析到这个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+ 来实现泛解析,不过不管什么二级域名都被解析到根目录了,郁闷!也就是说 *.achuan.net 会被指向 /www/achuan.net 再想想,于是,可以用 VirtualDocumentRoot /www/%2+/%0 来实现二级域名分目录,即 www.achuan.net 会被指向 /www/achuan.net/www.achuan.net test1.achuan.net 会被指向 /www/achuan.net/test1.achuan.net test2.achuan.net 会被指向 /www/achuan.net/test2.achuan.net 有点不足,这样,www.achuan.net 也需要在achuan.net目录下再建一个目录了,要是www能到根目录,其他二级域名到二级目录就好了,不过也好,这样规范点,呵呵 主要是以下这2句,再也不用一个个绑域名了,只需要建立对应域名的目录 UseCanonicalName Off VirtualDocumentRoot /www/%2+/%0 ============================================================== 一、使用 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 二、使用 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 阿川网络 - 领先的IT技术&网络技术学习交流平台 - www.achuan.net Generated by Bo-blog 2.1.1 Release