利用 Laravel host 静态网站

标题中的 host 真不知道应该用什么中文词更合适,那姑且就用 host 吧。

这个问题产生的情景是这样的:我们原本有一个静态网站,或者静态页。比如像使用 Sphinx 生成的文档,或者 munin 生成的图表页面,一般情况只要随便找个 http 服务器就能对外提供浏览服务了,但是当我们需要进行鉴权、或者希望和已有系统进行更深入的整合的时候,就不是很方便了。

当然,简单的鉴权可以直接使用 http 服务器的 basic auth 相关功能,不过这样用起来很不方便。

所以就用 laravel 简单的做了一下实现,思路是:

1. 将原本所有的静态页的 url 直接映射到文件系统读取文件内容然后返回
2. 不同的文件需要给定不同的,Content-Type

具体实现:

首先映射路由,注意给定一个正则规则,我这里用的最宽松的规则。

Route::get('munin/{uri?}', 'MuninController@getUri')->where('uri', '.*');

具体在的处理逻辑是这样,需要注意的就是对于文件的 MimeType 判定,需要实现一个方法,这个思路有很多。我这里只是用最简单的文件名后缀判断进行的实现。

    public function getUri($uri = '') {
        if (!$uri) {
            return Redirect::to('munin/index.html');
        }

        $filePath = $_ENV['munin_www_path'].$uri;
        $mimeType = $this->getMimeTypeByPath($filePath);

        $response = Response::make(File::get($filePath), 200);
        $response->header('Content-Type', $mimeType);
        return $response;
    }

这样,就可以更具需要在 getUri 相关方法中实现鉴权等相关控制。