使用.htaccess实现路由重定向至文件:单级有效多级失效求助
解决多级路由下静态资源加载失败的问题
你的问题核心在于两点:当前规则把所有请求(包括JS、CSS、图片这类静态资源)都转发到了index.php;而且多级路由下,浏览器会以当前路由层级为基准加载静态资源,导致路径匹配错误。
修正后的.htaccess配置
RewriteEngine On # 放行真实存在的文件、目录和符号链接,不做重写 RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d [OR] RewriteCond %{REQUEST_FILENAME} -l RewriteRule ^ - [L] # 其余所有请求转发到index.php处理 RewriteRule ^(.*)$ index.php [L]
关键补充说明
- 新增的
RewriteCond规则会先校验请求路径:如果是真实存在的文件、目录或符号链接,直接放行([L]表示停止后续规则执行),这样静态资源就能正常被访问到。 - 同时要确保HTML里引用静态资源时使用绝对路径(比如写
/css/style.css而不是css/style.css),或者在页面的<head>中添加base标签统一资源加载基准:
<base href="/">
这样不管是单级还是多级路由,静态资源都会从网站根目录加载,不会再出现路径错误。
内容的提问来源于stack exchange,提问作者THE CAT BROKEN
相关产品推荐
相关产品推荐

