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

配置网站从子目录提供页面时的404及资源加载故障排查

问题分析

资源加载失败的核心原因是:页面中资源使用了根绝对路径(如/store/xxx.png),而你的网站实际部署在服务器的/apps/mysite子目录下。这些根路径请求会直接指向服务器根目录(/home/infcs/server/public/store),但实际资源存储在/home/infcs/server/public/apps/mysite/public/store,且这类请求不会触发/apps/mysite目录下的.htaccess规则,因此返回404。

解决方案

根据可操作优先级,推荐以下两种方案:

方案1:修改网站资源引用路径(优先推荐)

直接修改页面中所有资源的引用路径,将根绝对路径改为子目录前缀的绝对路径或相对路径:

  • 子目录前缀的绝对路径:将/store/xxx.png改为/apps/mysite/store/xxx.png,/assets/xxx.js改为/apps/mysite/assets/xxx.js
  • 相对路径:如果页面文件位于网站根层级(如public/index.html),可直接改为store/xxx.png、assets/xxx.js(根据页面实际层级调整相对路径)

修改后,资源请求会指向http://localhost/apps/mysite/store/xxx.png,该请求会触发/apps/mysite下的.htaccess规则,自动转发到public子目录的对应资源。

方案2:在服务器根目录添加.htaccess规则(无需修改网站代码)

如果无法修改网站代码,可在服务器的DocumentRoot目录(/home/infcs/server/public)下创建或修改.htaccess文件,添加以下规则,将根路径的资源请求转发到apps/mysite/public目录:

<IfModule mod_rewrite.c>
    RewriteEngine On
    # 转发store、assets目录的请求到apps/mysite/public下
    RewriteRule ^store/(.*)$ /apps/mysite/public/store/$1 [L,QSA]
    RewriteRule ^assets/(.*)$ /apps/mysite/public/assets/$1 [L,QSA]
</IfModule>

同时保留/apps/mysite目录下的.htaccess规则(你修改后的版本):

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/apps/mysite/public/    
    RewriteRule ^(.*)$ /apps/mysite/public/$1 [L,QSA]
</IfModule>
额外注意事项
  • 确保Apache已启用mod_rewrite模块:执行sudo a2enmod rewrite启用,然后重启Apache服务sudo systemctl restart apache2
  • 确认apache2.conf中对/home/infcs/server/public目录的AllowOverride设置为All,否则根目录的.htaccess规则无法生效(若使用方案2)

内容的提问来源于stack exchange,提问作者infcs.ltd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:43:27