Laravel 5.5移除URL中public后图片路径失效问题咨询
这个问题我之前也碰到过,核心原因很明确:你通过根目录的.htaccess把网站的访问根路径从/public改成了项目根目录,但图片资源实际还是存放在public/admin_images下,原来的相对路径基准变了,浏览器自然找不到对应的资源。下面给你几个靠谱的解决方案:
1. 使用Laravel官方推荐的asset()辅助函数(最稳妥)
Laravel专门提供了处理静态资源路径的辅助函数,它会自动基于你.env文件里的APP_URL生成正确的绝对路径,完全不受URL结构变化的影响。把你的代码改成这样:
<a href="new_profile.php" class="thumbnail"> <img src="{{ asset('admin_images/noti.png') }}" alt="..."> <strong>Profile</strong> </a>
比如你的APP_URL是http://your-project.com,这个函数会生成http://your-project.com/admin_images/noti.png,直接指向public目录下的图片,不管你怎么配置.htaccess都不会出错。
2. 改用根相对路径(临时应急方案)
如果暂时不想用Laravel的辅助函数,可以给图片路径加上开头的斜杠,让浏览器从网站根目录开始查找(而网站根目录已经通过.htaccess映射到public了):
<a href="new_profile.php" class="thumbnail"> <img src="/admin_images/noti.png" alt="..."> <strong>Profile</strong> </a>
不过要注意,这种方式如果你的项目部署在子目录下(比如http://example.com/laravel-project),路径会出错,所以还是优先用第一种方法。
3. 确认根目录.htaccess配置正确
最后检查一下你根目录的.htaccess是否正确转发请求到public目录,正确的配置应该是这样的:
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule>
如果这个配置写错了,也会导致静态资源无法被正确解析。
另外提醒一句:不要为了省事把public目录里的文件直接移到项目根目录,这会破坏Laravel的安全结构,让敏感文件暴露在外网,风险很高。
内容的提问来源于stack exchange,提问作者kapildevsharma

