You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9共享主机public_path配置与邮件嵌入图片路径修复

解决Laravel 9邮件嵌入图片在Hostgator共享主机的路径问题

问题根源是Hostgator共享主机将Laravel的public目录内容迁移到了public_html文件夹,但Laravel默认的public_path()仍指向原来的public目录,导致邮件嵌入图片时找不到文件。以下是几种可行的解决方法:

方法一:修正Laravel的public路径配置

通过绑定自定义的path.public,让Laravel识别新的public目录位置:

  1. 打开项目根目录下的bootstrap/app.php文件
  2. 在初始化应用的代码后添加以下内容:
    $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');
    });
    
  3. 保存文件后,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 14:45:15