通过路由让某个目录静态文件可以被访问

walkor

有开发者希望能够通过路由让某个目录静态文件可以被访问,例如开发者开发了一个后台插件,插件的静态文件全部在 vendor/foo/admin/src/public下,则可以在config/route.php中添加下面路由让其可以被访问。

Route::any('/your/path/[{path:.+}]', function (Request $request, $path = '') {
    // 静态文件目录
    $static_base_path = base_path() . '/vendor/foo/admin/src/public';
    // 安全检查,避免url里 /../../../password 这样的非法访问
    if (strpos($path, '..') !== false) {
        return response('<h1>400 Bad Request</h1>', 400);
    }
    // 文件
    $file = "$static_base_path/$path";
    if (!is_file($file)) {
        return response('<h1>404 Not Found</h1>', 404);
    }
    return response('')->withFile($file);
});

这样通过url http://127.0.0.1:8787/your/path/xx/xx.js 访问静态文件了。

1074 4 10
4个评论

楚羽幽

感谢大佬分享

wolfcode

Route::any('/your/path/[{path:.+}]', function (Request $request, $path)
最好改成
Route::any('/your/path/[{path:.+}]', function (Request $request, $path='')
不然访问/your/path/会报错

cbasil

这个功能非常nice

  • 暂无评论
xianrenqh

这个功能非常 N I C E

  • 暂无评论

walkor

112221
积分
0
获赞数
0
粉丝数
2014-05-04 加入
🔝