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

.htaccess配置FANCY URL在子文件夹不生效 静态资源加载异常

问题原因排查

  • 路径匹配规则不匹配需求:你需要实现的www.example.com/booking/{varible1}/{varible2}是3级URL路径,原有规则^([^/]*)/([^/]*)$仅能匹配根目录下的2级路径,完全无法命中你要的目标URL格式,导致访问对应路径时规则不生效。
  • 静态资源重定向逻辑错误:原有第一条规则会强制把所有多级路径下的img/css/js请求301跳转到根目录对应路径,如果你的静态资源实际存放在项目子目录而非站点根目录,就会触发404错误,导致页面无样式加载。同时301是永久重定向,会被浏览器长期缓存,调试时容易残留旧规则影响。
  • 静态资源相对路径引用错误:如果页面内CSS/JS使用相对路径(如css/main.css),访问三级路径时浏览器会自动拼接为/booking/{varible1}/css/main.css,触发错误的重写规则导致资源加载失败。

修复方案

第一步:替换.htaccess规则为以下内容

RewriteEngine On

# 真实存在的文件/目录直接放行,不执行重写
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# 适配 /booking/{varible1}/{varible2} 格式的URL
RewriteRule ^booking/([^/]+)/([^/]+)$ ./index.php?varible1=$1&varible2=$2 [L,NC]

第二步:修复静态资源引用

两种方案二选一即可:

  • 把页面内所有CSS、JS、图片的引用路径改为绝对路径,例如/css/style.css、/img/logo.png
  • 在页面<head>标签的最开头添加base标签,指定页面相对路径的基准地址,示例:<base href="https://www.example.com/">(如果项目部署在子目录,就填子目录的根地址)

调试注意事项

  • 替换规则后清空浏览器缓存,避免之前的301重定向缓存影响测试
  • 如果项目部署在站点子目录而非根目录,需要在RewriteEngine On下方新增一行RewriteBase /你的子目录名称/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:57:04