From 28faf7cc5ad5974836cdc448fe1f2ec95deadf05 Mon Sep 17 00:00:00 2001 From: lion <120344285@qq.com> Date: Tue, 14 Apr 2026 15:20:43 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/web.php | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/routes/web.php b/routes/web.php index 2ee330e..ef26298 100644 --- a/routes/web.php +++ b/routes/web.php @@ -53,3 +53,39 @@ Route::get('/admin/{path?}', function (?string $path = null) { 'Content-Type' => 'text/html; charset=UTF-8', ]); })->where('path', '.*'); + +/* +| H5 uni-app(public/h5):与 admin 相同,在「所有请求经 index.php」的环境下直出 assets、static 等静态资源, +| 否则 /h5/assets/*.js、/h5/static/tab/*.png 可能 404,动态 import 与子路径资源会整页白屏。 +*/ +Route::get('/h5/{path?}', function (?string $path = null) { + $h5Base = realpath(public_path('h5')); + if ($h5Base === false || ! is_dir($h5Base)) { + abort(503, 'H5 frontend is not deployed (missing public/h5).'); + } + + if ($path !== null && $path !== '') { + $relative = str_replace(['/', '\\'], DIRECTORY_SEPARATOR, $path); + $candidate = realpath($h5Base.DIRECTORY_SEPARATOR.$relative); + if ($candidate !== false + && str_starts_with($candidate, $h5Base) + && is_file($candidate) + && is_readable($candidate)) { + return response()->file($candidate); + } + } + + $index = $h5Base.DIRECTORY_SEPARATOR.'index.html'; + if (! is_file($index) || ! is_readable($index)) { + abort(503, 'H5 index.html is missing or unreadable.'); + } + + $html = @file_get_contents($index); + if ($html === false) { + abort(503, 'Cannot read H5 index.html.'); + } + + return response($html, 200, [ + 'Content-Type' => 'text/html; charset=UTF-8', + ]); +})->where('path', '.*');