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

根目录index配合.htaccess RewriteRule处理子目录URI问题

解决URL重写后资源路径错误问题

问题根源

当URL被重写为localhost/zero/one这类子目录形式后,浏览器会基于当前地址栏的路径解析相对资源链接(比如./assets/...),导致请求指向localhost/zero/one/assets/...,但实际资源存放在public/assets目录下,因此出现404。

可行解决方案

  • 改用绝对路径引用资源
    把所有相对路径的资源引用改成绝对路径,比如将:

    <script src='./assets/jquery363.min.js'></script>
    

    修改为:

    <script src='/assets/jquery363.min.js'></script>
    

    (如果你的public目录是网站根目录,直接用/开头即可;如果public不是根,就写全路径/public/assets/...)

  • 设置<base>标签统一路径基准
    在index.php的<head>标签内添加<base>标签,指定所有相对路径的基准URL:

    <head>
      <base href="/"> <!-- 如果public是网站根目录 -->
      <!-- 或者 <base href="/public/"> 如果public是子目录 -->
      <!-- 其他head内容 -->
    </head>
    

    这样页面中所有相对路径的资源、链接都会基于这个基准地址解析,无需逐个修改资源路径。注意:设置后页面内的跳转链接(比如<a>标签)也会遵循这个基准,要确保路由逻辑兼容。

  • 通过.htaccess排除资源目录
    在现有重写规则前添加一条规则,让assets目录的请求直接访问真实文件,不经过index.php:

    RewriteEngine On
    # 直接放行assets目录的请求,不进入路由
    RewriteRule ^assets/ - [L]
    # 原有的重写规则:非文件/目录请求导向index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ index.php [L]
    

    这种方法适合不想修改HTML代码的场景,但要确保路由中不会出现和assets同名的路径,避免冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:47:11