laravel 路由跳转到vue/vite 项目文件
laravel 中使用了前端vue
或vite
等前端项目文件,希望访问laravel的某个路由时候进入到前端项目文件中
示例中的前端项目(vite)放在了laravel
的public/website/
下,里面包含index.html
入口文件和assets
文件夹资源文件
路由配置
// 默认首页
Route::get('/', function () {
// 获取 public/website/index.html 文件的绝对路径
$indexPath = public_path('website/index.html');
// 检查文件是否存在
if (file_exists($indexPath)) {
// 读取文件内容并发送给客户端
return response(file_get_contents($indexPath), 200, [
'Content-Type' => 'text/html',
]);
} else {
// 如果文件不存在,返回 404 错误
abort(404);
}
});
「可选」重定向静态资源文件路径
use Illuminate\Support\Facades\File;
use Illuminate\Http\Request;
// 把访问 assets 目录下的css和js文件的请求转发到 website/assets 目录下
Route::get('/assets/{assets}', function (Request $request, $assets) {
$extension = pathinfo($assets, PATHINFO_EXTENSION);
// 确保请求的资源是 .js 或 .css 文件
if (!in_array(strtolower($extension), ['js', 'css'])) {
abort(404, 'Invalid file type requested.');
}
$path = public_path('website/assets/' . $assets);
if (File::exists($path)) {
// 根据文件类型设置合适的 MIME 类型
$mimeType = ($extension === 'js') ? 'application/javascript' : 'text/css';
return response()->file($path, ['Content-Type' => $mimeType]);
}
abort(404, 'File not found.');
})->where(['assets' => '.*\.(js|css)$']); // 此约束确保 $asset 参数匹配 .js 或 .css 结尾的字符串