Laravel 9共享主机public_path配置与邮件嵌入图片路径修复
解决Laravel 9邮件嵌入图片在Hostgator共享主机的路径问题
问题根源是Hostgator共享主机将Laravel的public目录内容迁移到了public_html文件夹,但Laravel默认的public_path()仍指向原来的public目录,导致邮件嵌入图片时找不到文件。以下是几种可行的解决方法:
方法一:修正Laravel的public路径配置
通过绑定自定义的path.public,让Laravel识别新的public目录位置:
- 打开项目根目录下的
bootstrap/app.php文件 - 在初始化应用的代码后添加以下内容:
$app = Illuminate\Foundation\Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { // })->create(); // 添加这部分代码,调整路径匹配你的实际目录结构 $app->bind('path.public', function () { // 示例:若Laravel项目在 /home3/abc/abc,public_html在 /home3/abc,则用此路径 return realpath(base_path().'/../public_html'); // 若public_html在Laravel项目根目录下,改为 return base_path('public_html'); }); - 保存文件后,
public_path()就会返回正确的public_html路径,原邮件代码无需修改即可正常工作。
方法二:直接使用正确的绝对路径嵌入图片
如果不想修改全局配置,也可以直接在邮件Blade文件中指定正确的文件路径:
<img src="{{ $message->embed(realpath(base_path().'/../public_html/images/logo.png')) }}" alt="" style="width: 300px; max-width: 600px; height: auto; margin: auto; display: block;">
注意:路径中的../需要根据你的项目实际结构调整,确保准确指向public_html目录。
额外检查事项
- 确认
public_html/images/logo.png文件确实存在,且文件权限设置为644(保证服务器可读) - 其他正常显示的图片是通过Web访问路径加载的,而邮件嵌入需要服务器本地文件路径,这是两者出现差异的核心原因
内容的提问来源于stack exchange,提问作者Narakaya
相关产品推荐
相关产品推荐

