$belong[layout.vm]
<style>
    .bg-warning{padding: .5em;}
    .bg-danger{padding: .5em;}
</style>
</style>
<section class="container row">
    <div class="col-md-3">
        <div id="sidebar" class="my_sidebar">
            <ul class="nav">
                <li class="sidebar_head_li"><a href="#introduce">简介</a></li>
                <li class="sidebar_head_li"><a href="#base-conf">基本配置</a></li>
                <li class="sidebar_head_li"><a href="#host-conf">域名路由</a></li>
                <li class="sidebar_head_li"><a href="#filter-conf">过滤器(扩展)</a></li>
            </ul>
            $include[ads.html]
        </div>
    </div>

    <div class="page_content col-md-9" role="main">
        <section id="introduce">
            <h2>简介</h2>
            <p>基本的服务器功能, 除了按照指定的MIME输出请求数据, 有可能需要基本的文件夹列表展示、404页面配置,甚至多端口多服务等功能。</p>
        </section>
        <section id="base-conf">
            <h2>基本配置</h2>
            <p>基本服务器功能,配置localhost服务, 意味着:
            开启服务器后在浏览器直接访问 <a href="http://localhost" target="_blank">http://localhost</a> 将能看到对应root目录文件夹的展示</p>
            <pre class="language-javascript"><code>exports["localhost"] = {
    "root": "e:\\node_modules\\f2e-server\\",  //root 修改成自己的项目根目录
    "port": 80,     // 修改端口号 【默认80端口】
};
</code></pre>
            <p>有的时候我们不只是关注一个项目文件夹, 如果需要配置多个项目文件夹, 需要复制多份配置文件分别改名字并且修改端口号即可:</p>
            <pre class="language-javascript"><code>exports["localhost"] = {
    root: "E:\\"
};
exports["localhost1"] = {
    root: "D:\\",
    port: 8080
};
exports["localhost2"] = {
    root: "E:\\doc\\",
    port: 8043
};
</code></pre>
            <p>这样就能分别通过 <code>http://localhost</code>,<code>http://localhost:8080</code>,<code>http://localhost:8043</code> 来分别访问每个项目</p>
        </section>

        <section id="host-conf">
            <h2>域名路由</h2>
            <p>f2e-server同样支持在同个端口按照不同的访问域名分别索引不同的项目服务, 如下:</p>
            <pre class="language-javascript"><code>exports["localhost"] = {
    root: "E:\\"
};
exports["test.baidu.com"] = {   
    root: "D:\\"
};
exports["test.news.cn"] = { 
    root: "E:\\doc\\"
};
</code></pre>
            <p>已经配置的多个服务使用了同一个端口[默认的80], 我们期望通过域名来分别索引就需要进行域名解析</p>
            <p>因为本地域名解析需要修改系统的hosts文件来实现, f2e-server提供了一个hosts程序,快捷修改windows系统目录中的hosts文件【需要足够权限】</p>
            <p class="bg-danger">全局安装使用: <code>f2eserver hosts</code>, 如果是绿色非安装版点击 <code>hosts.cmd</code></p>
            <pre class="language-bash"><code>$ node hosts.js
  hosts backup in hosts.bak and Instead of new local-hosts config
</code></pre>
            <p>
                如果看到以上信息, 说明你的hosts自动配置完成,同时之前你正在使用的hosts配置备份在hosts.bak中 <br>
                使用 <code>node hosts.js reset</code> 可以将备份文件还原 
                (全局安装 使用<code>f2eserver reset</code>还原) 非安装版点击 <code>hosts-reset.cmd</code></p>
            </p>
            <p class="bg-warning">推荐使用80端口的多域名的配置方式配置项目</p>
        </section>

        <section id="filter-conf">
            <h2>使用过滤器<span class="not-important bg-primary">(扩展功能, 可不做了解)</span></h2>
            <p>使用服务器过滤器, 可以批量地处理很多特例情况, 如下:</p>
            <p><span class="bg-primary"> 例 </span>: 访问服务器目录 <code>/dist/*</code> 下面的资源时, 需要获取 <code>/src/</code> 下面的对应资源</p>
            <pre class="language-javascript"><code>exports["localhost"] = {
    "root": "e:\\node_modules\\f2e-server\\",  
    "filter": {
        get: function(req,resp){
            req.url = req.url.replace(/\bdist\b/,"src"); //所有通过服务器的请求都可以在这里进行拦截和修改
        }
    }
};</code></pre>
            <p><span class="bg-primary"> 例 </span>: 使用手机访问页面进行重定向</p>
            <pre class="language-javascript"><code>exports.localhost = {
    root: "E:\\",
    filter:{
        get: function(req, resp){
            var reg = /mobile\/([^_]*?)\.html/;     // 如果路径匹配, 且是手机UA, 追加 "_m" 进行重定向。
            if( req.headers["user-agent"].match(/mobile/i) &amp;&amp; req.url.match(reg) ){
                resp.writeHead(302, {
                    location: req.url.replace( reg, 'mobile\/$1_m\.html' )
                });
                resp.end();
            }
        }
    }
};</code></pre>
            <p><span class="bg-primary"> 例 </span>: 禁用服务器目录 <code>/node_modules/*</code> </p>
            <pre class="language-javascript"><code>exports["localhost"] = {
    "root": "e:\\node_modules\\f2e-server\\",  
    "filter": {
        get: function(req, resp){
            if( req.url.match(/^[\\\/]+(config|build|upload)([\/\\])*$/) ){
                resp.writeHead(403,{"content-type":"text/html"});
                resp.end('&lt;h2 style="text-align:center"&gt;禁止访问&lt;/h2&gt;');
                return false; // 设置返回值, 可以阻止请求相关功能继续执行.
            }
        }
    }
};</code></pre>
            <p><img src="images/server-403.gif" alt="网页-403"></p>
    </section>
</div>
<div class="page_bottom col-md-9 pull-right">
    <a href="start.html" class="pull-left">上一节: 使用入门</a>
    <a href="handle.html" class="pull-right">下一节: 模板引擎</a>
</div>
</section>