Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

APACHE帮定域名后直接生效,不重新启动APACHE方法是什么啊?

[复制链接]
思仪 发表于 2005-9-25 00:00:06 | 显示全部楼层 |阅读模式
APACHE帮定域名后直接生效,不重新启动APACHE方法是什么啊?

如果每次帮定都要去重新启动 APACHE 那样太麻烦了 影响别个站点了 有什么办法?
xooass 发表于 2005-9-25 19:57:05 | 显示全部楼层
方法1

编辑httpd.conf
在最后加上
NameVirtualHost *

<VirtualHost *>
rewriteengine on
rewritecond %{HTTP_HOST} [^.]+\.alibaba\.uni\.cc$
rewriterule ^(.+) %{HTTP_HOST}$1 [C]
rewriterule ([^.]+)\.alibaba\.uni\.cc(.*) /$1$2
    ServerAdmin webmaster@XXX.COM
    DocumentRoot /www
    ServerName alibaba.uni.cc
    ErrorLog logs/alibaba.uni.cc-error_log
    CustomLog logs/alibaba.uni.cc-access_log common
</VirtualHost>

http://username.alibaba.uni.cc对于username的主页请求转换为对http://alibaba.uni.cc/username的请求
---- 对于HTTP/1.1的请求包括一个Host: HTTP头,我们能用下面的规则集重写 http://username.alibaba.uni.cc/anypath到/home/username/anypath。
注: “rewritecond”表明是条件重写规则,当满足后面定义的条件后才会应用下面的重写规则,“rewritecond”有各种变量,请查阅相关文档。

其实是用到了APACHE的重写规则
回复

使用道具 举报

xooass 发表于 2005-9-25 19:59:33 | 显示全部楼层
第一步:打开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",这个选项要配好啊~~新手如果不懂的,就不要动这个了~
回复

使用道具 举报

xooass 发表于 2005-9-25 20:00:06 | 显示全部楼层
贴一个简单的vhost.map文件的操作代码。。。随意写的,,,


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="top" href="index.cgi" title="" />
<link rel="search" href="search.php" title="" />
<link rel="help" href="faq.php" title="" />
<link rel="author" href="memberlist.php" title="" />

<title>注册 - youname.sun126.com</title>

<style type="text/css">
<!--
body {
        background-color: #FFFFFF;
        scrollbar-face-color: #DEE3E7;
        scrollbar-highlight-color: #FFFFFF;
        scrollbar-shadow-color: #DEE3E7;
        scrollbar-3dlight-color: #D1D7DC;
        scrollbar-arrow-color:  #;
        scrollbar-track-color: #EFEFEF;
        scrollbar-darkshadow-color: #98AAB1;
}
font,th,td,p { font-family: 'song',Verdana }
a:link,a:active,a:visited { color : #; }
a:hover                { text-decoration: underline; color : #DD6900; }
hr        { height: 0px; border: solid #D1D7DC 0px; border-top-width: 1px;}
.bodyline        { background-color: #FFFFFF; border: 1px #98AAB1 solid; }
.forumline        { background-color: #000000; border: 0px #9898ba solid; }
td.row1        { background-color: #f0f3fa; }
td.row2        { background-color: #fafbfc; }
td.row3        { background-color: #D1D7DC; }
td.rowpic {
                background-color: #D1D9E2;
                background-repeat: repeat-y;
}
th        {
        color: #333333; font-size: 12px; font-weight : bold;
        background-color: #9898BA; height: 25px;

td.cat,td.catHead,td.catSides,td.catLeft,td.catRight,td.catBottom {
                        background-color:#d1d9e2; border: #9898ba; border-style: solid; height: 28px;
}

td.cat,td.catHead,td.catBottom {
        height: 29px;
        border-width: 0px 0px 0px 0px;
}
th.thHead,th.thSides,th.thTop,th.thLeft,th.thRight,th.thBottom,th.thCornerL,th.thCornerR {
        font-weight: bold; border: #FFFFFF; border-style: solid; height: 28px;
}
td.row3Right,td.spaceRow {
        background-color: #D1D7DC; border: #9898ba; border-style: solid;
}

th.thHead,td.catHead { font-size: 13px; border-width: 1px 1px 0px 1px; }
th.thSides,td.catSides,td.spaceRow         { border-width: 0px 1px 0px 1px; }
th.thRight,td.catRight,td.row3Right         { border-width: 0px 1px 0px 0px; }
th.thLeft,td.catLeft          { border-width: 0px 0px 0px 1px; }
th.thBottom,td.catBottom  { border-width: 0px 1px 1px 1px; }
th.thTop         { border-width: 1px 0px 0px 0px; }
th.thCornerL { border-width: 1px 0px 0px 1px; }
th.thCornerR { border-width: 1px 1px 0px 0px; }
.maintitle        {
        font-weight: bold; font-size: 22px; font-family: "'song',Verdana",'song',Verdana;
        text-decoration: none; line-height : 120%; color : #;
}
.gen { font-size : 13px; }
.genmed { font-size : 12px; }
.gensmall { font-size : 12px; }
.gen,.genmed,.gensmall { color : #; }
a.gen,a.genmed,a.gensmall { color: #; text-decoration: none; }
a.gen:hover,a.genmed:hover,a.gensmall:hover        { color: #DD6900; text-decoration: underline; }

/* The register, login, search etc links at the top of the page */
.mainmenu                { font-size : 12px; color : # }
a.mainmenu                { text-decoration: none; color : #;  }
a.mainmenu:hover{ text-decoration: underline; color : #DD6900; }

/* Forum category titles */
.cattitle                { font-weight: bold; font-size: 13px ; letter-spacing: 1px; color : #}
a.cattitle                { text-decoration: none; color : #; }
a.cattitle:hover{ text-decoration: underline; }

/* Forum title: Text and link to the forums used in: index.cgi */
.forumlink                { font-weight: bold; font-size: 13px; color : #; }
a.forumlink         { text-decoration: none; color : #; }
a.forumlink:hover{ text-decoration: underline; color : #DD6900; }

/* Used for the navigation text, (Page 1,2,3 etc) and the navigation bar when in a forum */
.nav                        { font-weight: bold; font-size: 12px; color : #;}
a.nav                        { text-decoration: none; color : #; }
a.nav:hover                { text-decoration: underline; }

/* titles for the topics: could specify viewed link colour too */
.topictitle       {font-size: 12px; color : #; }
h1,h2       { font-weight: bold; font-size: 12px; color : #; }
a.topictitle:link   { text-decoration: none; color : #; }
a.topictitle:visited { text-decoration: none; color : #333333; }
a.topictitle:hover        { text-decoration: underline; color : #DD6900; }

/* Name of poster in viewmsg.php and viewtopic.php and other places */
.name                        { font-size : 12px; color : #;}

/* Location, number of posts, post date etc */
.postdetails                { font-size : 12px; color : #; }

/* The content of the posts (body of text) */
.postbody { font-size : 13px; line-height: 18px}
a.postlink:link        { text-decoration: none; color : # }
a.postlink:visited { text-decoration: none; color : #333333; }
a.postlink:hover { text-decoration: underline; color : #DD6900}

/* Quote & Code blocks */
.code {
        font-family: 'song',Verdana; font-size: 12px; color: #006600;
        background-color: #FAFAFA; border: #D1D7DC; border-style: solid;
        border-left-width: 1px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px
}

.quote {
        font-family: 'song',Verdana; font-size: 12px; color: #444444; line-height: 125%;
        background-color: #FAFAFA; border: #D1D7DC; border-style: solid;
        border-left-width: 1px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px
}

/* Copyright and bottom info */
.copyright                { font-size: 12px; font-family: 'song',Verdana; color: #444444; letter-spacing: -1px;}
a.copyright                { color: #444444; text-decoration: none;}
a.copyright:hover { color: #; text-decoration: underline;}

/* Form elements */
input,textarea, select {
        color : #;
        font: normal 12px 'song',Verdana;
        border-color : #;
}

/* The text input fields background colour */
input.post, textarea.post, select {
        background-color : #FFFFFF;
}

input { text-indent : 2px; }

/* The buttons used for bbCode styling in message post */
input.button {
        background-color : #EFEFEF;
        color : #;
        font-size: 12px; font-family: 'song',Verdana;
}

/* The main submit button option */
input.mainoption {
        background-color : #FAFAFA;
        font-weight : bold;
}

/* None-bold submit button */
input.liteoption {
        background-color : #FAFAFA;
        font-weight : normal;
}
-->
</style>
</head>
<body  bgcolor="#FFFFFF" text="#" link="#" vlink="#333333" />
<a name="top"></a>

<!--栏目条-->
<style type=text/css>
A.title1:link {font-size:17.9px;font-family:arial;font-weight:bold;text-decoration:none;color:#ffffff;}
A.title1:visited {font-size:17.9px;font-family:arial;font-weight:bold;text-decoration:none;color:#ffffff;}
A.title1:active {font-size:17.9px;font-family:arial;font-weight:bold;text-decoration:none;color:#ffffff;}
A.title1:hover {font-size:17.9px;font-family:arial;font-weight:bold;text-decoration:none;color:#ffffff;}
A.title2:link {text-decoration:none;color:#000000;font-size:12px}
A.title2:visited {text-decoration:none;color:#000000;font-size:12px}
A.title2:active {text-decoration:none;color:#ff0000;font-size:12px}
A.title2:hover {text-decoration:none;color:#ff0000;font-size:12px}
</style>
<?php
if (empty($HTTP_POST_VARS[reg])) {

    ?>
<form action="<?=$PHP_SELF?>" enctype="multipart/form-data" method="post">
<table border="0" cellpadding="3" cellspacing="1" width="95%" align=center class="forumline">
        <tr>
                <th class="thHead" colspan="2" height="25" valign="middle"> <a href=http://www.sun126.com>精彩奇讯科技虚拟主机自助申请系统</a> 请填写注册信息</th>
        </tr>
        <tr>
                <td class="row2" colspan="2"><span class="gensmall">请输入在本服务器新增的域名:</span></td>
        </tr>
        <tr>
                <td class="row1" width="20%"><span class="gen">域名名称:   http://</span></td>
                <td class="row2"><input type="text" class="post" style="width:100px" name="domain" size="10" maxlength="25"><span class="gen"><font color=red>.sun126.com</font></span></td>
        </tr>
                <tr>
                <td  class="row1" colspan="2" align="center" height="28">
<input type="hidden" name="dateformat" value="Y-m-d H:m" maxlength="14" class="post" />
                <input type="hidden" name="reg" value="1" /><input type="submit" name="submit" value="发送" class="mainoption" />  <input type="reset" value="重设" name="reset" class="liteoption" /></td>
        </tr>
</table>
</form>
</center>
</body>
</html>
<?php }
?>
<?php


if ($HTTP_POST_VARS[reg]) {
for($i=0;$i<9;$i++){
$char1=chr(rand(97,122));
$chara.=$char1;
}
    $domain = $HTTP_POST_VARS[domain] . ".sun126.com   /" . $HTTP_POST_VARS[domain];
    // 检查并创建目录开始*******************************
    if (is_dir('d:/vhostuser/user_'.$chara.'_'.$HTTP_POST_VARS[domain])) {
        $domain = "http://" . $domain;
        echo "<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" width=\"95%\" align=center class=\"forumline\"><tr>
                <td class=\"row2\" colspan=\"2\"><span class=\"gensmall\">此域名已经使用,请更换~~<a href=$PHP_SELF>返回</a></span></td>
        </tr>
        <tr>
                <td class=\"row2\" colspan=\"2\"><span class=\"gensmall\">      <a href=$domain target=_blank><FONT COLOR=BLUE><u>点击查看已开空间</u></FONT></a></span></td>
        </tr></table>";
        exit;
    } else {
        mkdir('d:/vhostuser/user_'.$chara.'_'.$HTTP_POST_VARS[domain]);
    }

    $HTTP_POST_VARS[reg] = "0";
    $domain = "http://" . $domain;
    echo "<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" width=\"95%\" align=center class=\"forumline\"><tr>
                <td class=\"row2\" colspan=\"2\"><span class=\"gensmall\">空间开设成空!~~<a href=$PHP_SELF>返回</a></span><span class=\"gensmall\">    <a href=$domain target=_blank><FONT COLOR=BLUE>点击查看已开空间</FONT></a>  <a href=http://www.sun126.com>< 联系我们 - 精彩奇讯科技></a> </span></td>
        </tr></table>";
}

?>
回复

使用道具 举报

xooass 发表于 2005-9-25 20:03:21 | 显示全部楼层
似乎曾经在哪里见过的一个动态加载VHOST虚拟主机不重启动的方法的   也许也可以实现  我现在去找找资料 不一定能找出来
回复

使用道具 举报

xooass 发表于 2005-9-25 20:24:13 | 显示全部楼层
Apache 2.0手册中文版翻译项目 [本文译者: forehead * ]




--------------------------------------------------------------------------------

模块索引 | 指令索引 | 常见问题解答 | 词汇表 | 站点导航

Apache HTTP服务器 2.0版本



Apache主站 > HTTP服务器 > 文档 > 2.0版本 > 虚拟主机
大容量虚拟主机的动态配置
本文档描述如何使用 Apache 1.3 有效的架设大容量的虚拟主机服务器。

动机
概要
简单的动态虚拟主机
一个实际的个人主页主机系统
在同一个服务器上架设多个主机的虚拟系统
更为有效的基于 IP 地址的虚拟主机
使用老版本的 Apache
使用 mod_rewrite 实现简单的动态虚拟主机
使用 mod_rewrite 的个人主页系统
使用独立的虚拟主机配置文件

动机
如果你的配置文件 httpd.conf 中包含类似下面的许多 <VirtualHost> 部分,并且其中的内容都大致相同的话, 你应该会对这里所要讲的技术比较感兴趣。

NameVirtualHost 111.22.33.44
<VirtualHost 111.22.33.44>

ServerName www.customer-1.com
DocumentRoot /www/hosts/www.customer-1.com/docs
ScriptAlias /cgi-bin/ /www/hosts/www.customer-1.com/cgi-bin

</VirtualHost>
<VirtualHost 111.22.33.44>

ServerName www.customer-2.com
DocumentRoot /www/hosts/www.customer-2.com/docs
ScriptAlias /cgi-bin/ /www/hosts/www.customer-2.com/cgi-bin

</VirtualHost>
# blah blah blah
<VirtualHost 111.22.33.44>

ServerName www.customer-N.com
DocumentRoot /www/hosts/www.customer-N.com/docs
ScriptAlias /cgi-bin/ /www/hosts/www.customer-N.com/cgi-bin

</VirtualHost>

最基本的思想是用动态的机制来实现所有这些静态的 <VirtualHost> 配置。这样做有许多优点:

配置文件变小,使得 Apache 可以更快的启动,同时消耗更少的内存。
添加一个虚拟主机,应该只是简单的在文件系统中创建合适的目录, 以及配置相关的 DNS 信息,并且无需重新启动 Apache。
主要的缺点是你无法针对每个虚拟主机用户使用不同的日志文件。 然而,如果真的在配置有大量虚拟主机的服务器上记录不同的日志文件的话, 很有可能会达到操作系统所允许的最大文件描述符(file descriptors)的数量。 更好的办法是把日志写到管道(pipe)或者先入先出(fifo)的堆栈, 并启用其他的进程来分发所得到的日志信息给用户(同时也可以做一些历史纪录的统计等等)。


概要
一个虚拟主机有两部分来定义:一个是它的 IP 地址, 还有一个是 HTTP 请求中 Host: 头的内容。 动态大容量虚拟主机的技术, 是基于自动在所要返回的文件的路径中插入相关信息的想法而实现的。 使用mod_vhost_alias 可以很容易的实现, 但如果你的 Apache 版本低于 1.3.6 ,则你必须使用 mod_rewrite。 两者在默认情况下都不启用; 要使用他们,必须在配置和编译 Apache 的阶段声明启用(enable)。

我们需要做很多伪装,才能使动态虚拟主机看起来像普通情况。 最重要的一点是 Apache 使用虚拟主机名字(Server Name)来生成自我参考(self-referential) 的 URLs 等等信息。这是用 ServerName 指令来配置的, 并且可以通过环境变量 SERVER_NAME 传递给 CGI 脚本。 在运行时所实际使用的值是由指令 UseCanonicalName 的设置情况来控制的。当 UseCanonicalName Off 时, 虚拟主机名字(server name)取自请求中的 Host: 头的内容。 当 UseCanonicalName DNS 时,则通过 DNS 反解析虚拟主机的IP 地址得到主机名字。 以前的做法是用基于名称的动态虚拟主机,近来常用基于 IP 地址的虚拟主机设置。 如果 Apache 无法决策虚拟主机名字,则可能是没有 Host: 头信息或者 DNS 解析失败, 遇到这样的情况,Apache 使用配置 ServerName 时所填写的主机名字。


简单的动态虚拟主机
这是 httpd.conf 文件中,完成和上文 动机 部分所提到的虚拟主机一样效果的配置方法,但这里采用了 mod_vhost_alias 。

# 从 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


将 UseCanonicalName Off 的配置改为 UseCanonicalName DNS 即可实现基于 IP 地址的虚拟主机。而在文件路径中所要插入的服务器名字(server name) 则通过虚拟主机的 IP 地址解析而得。


一个实际的个人主页主机系统
这里对上面的系统作了一点调整,便可作为 ISP 的个人主页服务器。 我们使用了略微复杂的方法,从服务器名字(Server Name)中提取子字符串, 并插入到文件路径中。在这个例子中,www.user.isp.com 的文档将在 /home/user/ 中定位。并对所有虚拟主机使用单个 cgi-bin 目录。

# 所有之前的准备事项和上面一样,然后

# 在文件路径中包含服务器名字(server name)
VirtualDocumentRoot /www/hosts/%2/docs

# 单个 cgi-bin 目录
ScriptAlias /cgi-bin/ /www/std-cgi/


更复杂的关于 VirtualDocumentRoot 的设置,可以查阅 mod_vhost_alias 文档。


在同一个服务器上架设多个主机的虚拟系统
更复杂的设置,应该使用 Apache 的 <VirtualHost> 指令来管理各种虚拟主机配置的作用域。例如,你可以用一个 IP 地址来给个人主页客户使用, 同时用下面的配置提供给商业客户使用。自然的, 这两者通过运用 <VirtualHost>结合到一起。

UseCanonicalName Off

LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon

<Directory /www/commercial>

Options FollowSymLinks
AllowOverride All

</Directory>

<Directory /www/homepages>

Options FollowSymLinks
AllowOverride None

</Directory>

<VirtualHost 111.22.33.44>

ServerName www.commercial.isp.com

CustomLog logs/access_log.commercial vcommon

VirtualDocumentRoot /www/commercial/%0/docs
VirtualScriptAlias /www/commercial/%0/cgi-bin

</VirtualHost>

<VirtualHost 111.22.33.45>

ServerName www.homepages.isp.com

CustomLog logs/access_log.homepages vcommon

VirtualDocumentRoot /www/homepages/%0/docs
ScriptAlias /cgi-bin/ /www/std-cgi/

</VirtualHost>


更为有效的基于 IP 地址的虚拟主机
在 第一个例子 中说过,转为基于 IP 地址的虚拟主机设置很容易做到。 但不幸的是,那种做法并不高效,因为这样会在每次处理请求时,需要查询 DNS 。 通过在文件系统中包含IP 地址的做法可以避免这样的问题。这样一来, 免去了和服务器名字的关联,在日志记录中也一样可以用 IP 来分离不同日志。 Apache 将不会为了确定服务器名字(server name)而去做 DNS 查询。

# 从 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



使用老版本的 Apache
上面的例子基于 mod_vhost_alias ,但它是在版本 1.3.6 之后才出现的。 如果你的版本比较老,可以通过使用 mod_rewrite 来达到相同的目的, 如下所示。但只能是基于 Host: 头方式的虚拟主机。

此外还须注意日志方面的问题。Apache 1.3.6 是第一个支持 %V日志格式指令的版本, 在版本 1.3.0 - 1.3.3 中,%v 选项做和 %V 一样的事情; 而在版本 1.3.4 中没有等价指令。在所有的这些版本中,指令 UseCanonicalName 可以出现在 .htaccess 文件中,这意味着客户的设置可能会导致日志记录紊乱。 所以最好的做法是使用 %{Host}i 指令,它可以直接记录 Host: 头; 注意,这样可能在末尾包含 :port ,而使用 %V 则不会这样。


使用 mod_rewrite 实现简单的动态虚拟主机
这里的例子摘自 httpd.conf ,效果等同于 第一个例子中的情况。 前半部分和上面的例子大致相似,只是为了后向兼容 mod_rewrite 作了适当修改; 后半部分配置 mod_rewrite 来做实际的工作。

有些特别的地方需要注意:默认情况下,mod_rewrite 在所有其他 URI 转换模块 (mod_alias 等)之前运行,所以如果使用这些模块的话, mod_rewrite 必须作相应的调整。同时,我们还要为每个动态虚拟主机变些戏法, 使之等效于 ScriptAlias。

# 从 Host: 头获取服务器名字
UseCanonicalName Off

# 可分割的日志
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon

<Directory /www/hosts>
# ExecCGI is needed here because we can't force
# CGI execution in the way that ScriptAlias does
Options FollowSymLinks ExecCGI
</Directory>

# 接下来是关键部分

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]

# 好了!



使用 mod_rewrite 的个人主页系统
这里的配置完成和第二个例子相同的工作。

RewriteEngine on

RewriteMap lowercase int:tolower

# 允许 CGIs 工作
RewriteCond %{REQUEST_URI} !^/cgi-bin/

# 检查 hostname 正确与否,之后才能使 RewriteRule 起作用
RewriteCond ${lowercase:%{SERVER_NAME}} ^www\.[a-z-]+\.isp\.com$

# 将虚拟主机名字廉洁到 URI 的开头
# [C] 表明本次重写的结果将在下一个 rewrite 规则中使用
RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]

# 现在创建实际的文件名
RewriteRule ^www\.([a-z-]+)\.isp\.com/(.*) /home/$1/$2

# 定义全局 CGI 目录
ScriptAlias /cgi-bin/ /www/std-cgi/



使用独立的虚拟主机配置文件
这样的布局利用了 mod_rewrite 的高级特性, 在独立的虚拟主机配置文件中转换。如此可以更为灵活,但需要较为复杂的设置。

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


维护者: Apache HTTP Server Documentation Project
模块索引 | 指令索引 | 常见问题解答 | 词汇表 | 站点导航
回复

使用道具 举报

loveapple 发表于 2005-9-27 10:24:06 | 显示全部楼层
  1. /etc/init.d/httpd graceful
复制代码

如果是redhat也可以用
  1. /etc/init.d/httpd reload
复制代码
回复

使用道具 举报

degmd 发表于 2005-9-27 10:34:38 | 显示全部楼层
好贴
学习了
回复

使用道具 举报

网络 发表于 2005-9-27 23:55:36 | 显示全部楼层
好东西
回复

使用道具 举报

cqfanli 发表于 2005-9-28 08:34:27 | 显示全部楼层
既然大家都说好,并且的确有用,我就加精了~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-24 01:04 , Processed in 0.039112 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表