根目录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
相关产品推荐
相关产品推荐

