Laravel 6添加带参数路由后logo图片路径异常问题排查
问题根因
图片使用相对路径引用,当路由存在/category/{id}这类二级路径时,浏览器会将相对路径与当前页面的URL前缀拼接,最终生成带多余/category前缀的错误路径。删除路由参数后路由为一级路径,拼接后的路径刚好符合预期,因此资源可正常加载。
解决方案
- 方案1(推荐,Laravel标准写法):使用Laravel内置的
asset()辅助函数生成资源绝对路径,修改siteHeader.blade.php里的img标签代码:
<a class="navbar-brand" href="{{url('/')}}"> <img src="{{ asset('assets/images/logo.png') }}" width="280" height="75" alt=""/>
asset()会自动生成指向项目public目录的绝对路径,不受当前页面路由层级影响,同时也不需要手动加public前缀,适配站点根目录指向public的标准部署规范。
- 方案2(快速修复):给图片路径开头加斜杠,改为根路径相对路径:
<img src="/public/assets/images/logo.png" width="280" height="75" alt=""/>
开头加/后浏览器会直接从站点根目录开始查找资源,不会和当前页面的路由路径拼接。
额外优化提示
- 你路由定义中
{id?}是可选参数,控制器方法的$id参数需要设置默认值,否则访问不带id的/category路由时会抛出参数缺失错误,修改控制器代码:
public function category(Request $request, $id = null) { $course = DB::table('course') ->select('course.*') ->where('course.slug', '=' , $id) ->orderBy('course.id', 'DESC'); $course = $course->paginate(20); return view('category')->with(compact('course')); }
- 生产环境建议将站点域名的根目录直接指向项目的public文件夹,既可以隐藏项目核心代码提升安全性,也可以去掉资源路径里的
public前缀,简化路径写法。
内容的提问来源于stack exchange,提问作者Muttakii Khan
相关产品推荐
相关产品推荐

