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

Laravel 8 部署于Apache2子目录时子页面/路由图片无法加载

问题根源

首页正常、子页面图片加载失败的现象绝大多数场景下与.htaccess配置无关,主要由两类错误导致:

  • 页面内图片使用相对路径引用,子路由下相对路径会基于当前路由地址拼接,生成错误的资源请求路径
  • Laravel核心配置未适配子目录部署场景,资源生成函数输出路径错误

解决步骤

1. 修正Laravel基础配置

首先打开项目根目录下的.env文件,修改APP_URL参数为带子目录的站点地址:

APP_URL=https://你的实际域名/blog

所有页面内的资源引用统一使用Laravel提供的asset()辅助函数生成路径,函数会自动拼接子目录前缀,输出正确的资源地址:

// 正确写法,最终输出路径为 /blog/img/logo.png
<img src="{{ asset('img/logo.png') }}">

// 禁止直接使用相对路径写法
<img src="img/logo.png">

如果是静态HTML、JS内引用的资源,统一使用带前缀的绝对路径,格式为/blog/资源相对public目录的路径,例如src="/blog/img/logo.png"。

2. 优化.htaccess配置

你现有.htaccess配置本身符合子目录部署要求,无需大规模修改。如果仍存在静态资源被重定向到Laravel路由的问题,可以新增一行静态资源后缀忽略规则,提升静态资源加载优先级:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    RewriteBase /blog/

    # 新增:忽略常见静态资源的重写规则
    RewriteRule \.(png|jpg|jpeg|gif|ico|css|js|woff|woff2|ttf|svg)$ - [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

3. 验证Apache基础配置

确认以下两个Apache配置项正确,避免基础配置错误导致的问题:

  • /blog子目录对应的站点根目录指向Laravel项目的public文件夹,而非项目根目录
  • 站点的<Directory>配置段中开启了AllowOverride All,保证.htaccess规则可以生效
    配置修改完成后重启Apache服务即可。

内容的提问来源于stack exchange,提问作者JayDi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:06:00