Files
2026-08-31 11:33:59 +08:00

197 lines
5.6 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* This file is part of webman.
* Licensed under The MIT License
* For full copyright and license information, please see MIT-LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @author walkor<walkor@workerman.net>
* @copyright walkor<walkor@workerman.net>
* @link http://www.workerman.net/
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
use support\Request;
use Webman\Route;
use app\middleware\CheckInstallMiddleware;
use app\middleware\FileAccessMiddleware;
/**
* 后台模块路由
*/
require_once app_path('adminapi/config/route.php');
/**
* 前台模块路由
*/
require_once app_path('api/config/route.php');
// 安装页面
Route::get('/install', function () {
$file = public_path() . '/install/index.html';
if (!file_exists($file)) {
return response('File not found', 404);
}
return response(file_get_contents($file), 200, [
'Content-Type' => 'text/html',
]);
});
// 站点首页
Route::get('/', function () {
return redirect('/web');
})->middleware(CheckInstallMiddleware::class);
// 后台管理
Route::get('/admin', function () {
$file = public_path() . '/admin/index.html';
if (!file_exists($file)) {
return response('File not found', 404);
}
return response(file_get_contents($file), 200, [
'Content-Type' => 'text/html',
]);
})->middleware(CheckInstallMiddleware::class);
/**
* 后台静态资源路由
* 访问路径: /admin/*
* 资源目录: public/admin/
* 无需权限验证
*/
Route::any('/admin/[{path:.+}]', function (Request $request, $path = '') {
$admin_path = public_path() . '/admin';
// 安全检查,避免url里 /../../../password 这样的非法访问
if (str_contains($path, '..')) {
return response('<h1>400 Bad Request</h1>', 400);
}
// 文件
$file = "$admin_path/$path";
if (!is_file($file)) {
return response('<h1>404 Not Found</h1>', 404);
}
return response('')->withFile($file);
});
Route::any('/install/[{path:.+}]', function (Request $request, $path = '') {
$install_path = public_path() . '/install';
// 安全检查,避免url里 /../../../password 这样的非法访问
if (str_contains($path, '..')) {
return response('<h1>400 Bad Request</h1>', 400);
}
// 文件
$file = "$install_path/$path";
if (!is_file($file)) {
return response('<h1>404 Not Found</h1>', 404);
}
return response('')->withFile($file);
});
Route::any('/web/[{path:.+}]', function (Request $request, $path = '') {
$web_path = public_path() . '/web';
// 安全检查,避免url里 /../../../password 这样的非法访问
if (str_contains($path, '..')) {
return response('<h1>400 Bad Request</h1>', 400);
}
// 文件
$file = "$web_path/$path";
if (!is_file($file)) {
// 对于SPA应用,如果文件不存在,返回index.html让前端路由处理
$index_file = "$web_path/index.html";
if (is_file($index_file)) {
return response(file_get_contents($index_file), 200, [
'Content-Type' => 'text/html',
]);
}
return response('<h1>404 Not Found</h1>', 404);
}
return response('')->withFile($file);
});
// 移动端
Route::get('/mobile', function () {
$file = public_path() . '/mobile/index.html';
if (!file_exists($file)) {
return response('File not found', 404);
}
return response(file_get_contents($file), 200, [
'Content-Type' => 'text/html',
]);
})->middleware(CheckInstallMiddleware::class);
// PC端
Route::get('/web', function () {
$file = public_path() . '/web/index.html';
if (!file_exists($file)) {
return response('File not found', 404);
}
return response(file_get_contents($file), 200, [
'Content-Type' => 'text/html',
]);
})->middleware(CheckInstallMiddleware::class);
/**
* 静态资源路由
* 访问路径: /static/*
* 无需权限验证
*/
Route::any('/static/[{path:.+}]', function (Request $request, $path = '') {
$static_base_path = base_path() . '/static';
// 安全检查,避免url里 /../../../password 这样的非法访问
if (str_contains($path, '..')) {
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);
});
/**
* 文件上传读取路由
* 访问路径: /uploads/*
* 需要权限验证
*/
Route::any('/upload/[{path:.+}]', function (Request $request, $path = '') {
$upload_path = public_path() . '/upload';
// 安全检查,避免url里 /../../../password 这样的非法访问
if (str_contains($path, '..')) {
return response('<h1>400 Bad Request</h1>', 400);
}
// 文件
$file = "$upload_path/$path";
if (!is_file($file)) {
return response('<h1>404 Not Found</h1>', 404);
}
return response('')->withFile($file);
})->middleware(FileAccessMiddleware::class);
/**
* 根目录资源文件(如 /logo.png, /favicon.ico)
* 显式列出已知文件,避免万能匹配导致路由冲突
*/
Route::get('/logo.png', function () {
$file = public_path() . '/logo.png';
if (!is_file($file)) {
return response('', 404);
}
return response('')->withFile($file);
});
Route::get('/favicon.ico', function () {
$file = public_path() . '/favicon.ico';
if (!is_file($file)) {
return response('', 404);
}
return response('')->withFile($file);
});
/**
* 关闭默认路由
*/
Route::disableDefaultRoute();