Mod Rewrite重写规则配置后相对路径资源链接加载错误如何解决
问题原因
浏览器解析相对路径时会以当前访问的URL路径(即https://example.com/documentation/process)为基准,因此会把assets/css/xxx.css这类相对路径拼接为https://example.com/documentation/assets/css/xxx.css,和实际资源存放位置不符,导致加载失败。以下三种方案都不需要修改为带域名的全绝对路径,即可解决问题:
方案1:在HTML头部添加base标签(操作成本最低)
在所有涉及资源加载的页面<head>标签内添加如下代码:
<base href="/">
这行代码会指定浏览器解析当前页面所有相对路径时,统一以站点根路径为基准,assets/css/xxx.css就会被正确解析为/assets/css/xxx.css。如果站点部署在二级目录,把href的值修改为对应二级目录即可,比如<base href="/mysite/">。
方案2:修改.htaccess规则,排除静态资源重写
在现有Rewrite规则前添加静态资源跳过逻辑,让重写规则不对静态资源生效:
RewriteEngine on # 匹配到静态资源直接终止后续重写逻辑 RewriteRule \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf)$ - [L] RewriteRule documentation documentation.php?id=0 RewriteRule documentation/process documentation.php?id=1
方案3:修改资源为站点根相对路径
把所有资源引用路径开头加/,比如将assets/css/xxx.css改为/assets/css/xxx.css,这类路径是相对于站点根的相对路径,不需要带域名,也不会受当前页面URL路径的影响。
内容的提问来源于stack exchange,提问作者RCH
相关产品推荐
相关产品推荐

