天下第二博

Tian Xia The Second BO
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

使apache解析域名到目录的方法

Posted on 2009-06-19 08:55  Nuke'Blog  阅读(1515)  评论(0编辑  收藏  举报
apache如何将一个域名自动定位到目录 有两种解决办法

  首先,你的拥有一个有泛域名解析的顶级域名,例如: domain.com其次,在 httpd.conf 中打开 mod_rewrite之后,在 httpd.conf 的最后,添加以下内容:

  RewriteEngine on

  RewriteMap lowercase int:tolower

  RewriteMap vhost txt:/usr/local/etc/apache/vhost.map

  RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$

  RewriteCond ${vhost:%1} ^(/.*)$

  RewriteRule ^/(.*)$ %1/$1

  其中的 /usr/local/etc/apache 是你的 apache 服务器配置文件所在路径,根据实际情况更改。

  然后,在这个所在路径的目录下创建一个文件: vhost.map

  内容为:

  www.domain.com /usr/local/www/data-dist/domain

  bbs.domain.com /usr/local/www/data-dist/bbs

  anyname.domain.com /usr/local/www/data-dist/anyname

  以上部分都是:” 域名+空格+绝对路径” 的形式。

  最后,在你的网站根目录 /usr/local/www/data-dist 下,创建对应目录:

  domain , bbs , anyname 等等,理论上可以无限。

  这 样,通过浏览器,访问 www.domain.com 时,实际上访问的就是 /usr/local/www/data-dist/domain目录下的文件。同理,访问 bbs.domain.com 实际上访问的就是 /usr/local/www/data-dist/bbs 目录下的文件。而且,你可以

  随时更改 vhost.map 来增加、删除、修改你的二级域名和所指向的实际路径,不用重启 apache。

  第一步:打开apache的配置文件httpd.conf,去掉LoadModule rewrite_module modules/mod_rewrite.so前面的#号。

  第二步:打配置文件尾部加上

  RewriteEngine on

  RewriteMap lowercase int:tolower

  #定义映像文件

  RewriteMap vhost txt:/apache/vhost/vhost.map

  #处理变名

  RewriteCond %{REQUEST_URI} !^/icons/

  RewriteCond %{REQUEST_URI} !^/cgi-bin/

  RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$

  这里做基于文件的重新映射

  RewriteCond ${vhost:%1} ^(/.*)$

  RewriteRule ^/(.*)$ %1/$1

  RewriteCond %{REQUEST_URI} ^/cgi-bin/

  RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$

  RewriteCond ${vhost:%1} ^(/.*)$

  RewriteRule ^/(.*)$ %1/cgi-bin/$1

  注意:vhost.map文件是域名和空间映像的文件,格式如下: 

  www.abc.com /vhostusr/www.abc.com

  www.xyz.com /vhostuser/www.xyz.com

  www.cccbbbb.net /vhostuser/www.ccbbbb.net

  .

  .

  .

  .

  (你不会连/vhostuser/www.abc.com目录也没建吧,会报错的哟)

  第三步:保存配置文件,重启apache。在开设可绑定域名的空间时,只要在vhost.map文件里添加相应记录,并建立相应文件夹就OK了~~~

  其实这个可以用php脚本来完成的,很简单的~~呵呵~~~

  注意啊:php_admin_value open_basedir “path,这个选项要配好啊~~新手如果不懂的,就不要动这个了~

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

  方法二、

  rewriteengine on

  rewritecond %{HTTP_HOST} [^.]+.域名.com$

  rewriterule ^(.+)$ %{HTTP_HOST}$1 [C]

  rewriterule ^([^.]+).域名.com(.*)$ /$1$2

  其他配置文件

  接着在DNS中开设一个泛解析到对应的IP地址。

  就可以实现下面的方案。

  域名:domain.com

  绝对路径:/home/domain.com/

  www.domain.com 自动解析到 /home/domain.com/www/

  abc.domain.com 自动解析到 /home/domain.com/abc/

  等等子域名都可以自动解析到 /home/domains.com/对应子域名名称的文件夹

  直接建立子域名名称的文件夹即可使用。不需重启apache