看一下下图中静态资源的引用路径:
那么,这个路径是相对于谁的呢?
看上图,浏览器会把请求路径的最后一部分,即login,认为不是路径,而是路径下面的文件
也就是说,浏览器会认为login是一个文件,/admin才是请求路径
所以模板中的相对路径是相对于/admin的。
当然,存在特殊情况,客户端的请求路径/admin
和服务器端存储静态资源的文件夹public的路径是相同的。
如果存放模板文件的文件夹和 存放静态资源的文件夹名字一样,是恰好不会出错的,如下面两张图(public是存放静态资源,views存放模板文件)
如何证明出错呢?
在地址栏中输入localhost/abc/login
会发现样式消失了
如何解决这种问题呢?
- 只需要将相对路径改成绝对路径即可
- 在模板中 '/ '可以代表绝对路径
总结
首先我们要知道,我们开放了public目录,那么外链静态资源都是在public目录下的。如:
第一张图片的href="css/base.css"
,浏览器会找到public/admin/css/base.css所以不会出错。
但是,如果将路由请求路径由/admin
改成了 /abc
,则浏览器就会去找 public/abc/css/base.css,这是就会找不到base.css文件了,因为在public下没有abc文件夹!
所以,直接干脆地将views目录下面的模板文件中的外链静态资源全部改成绝对路径就完事了!