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

多站点子目录CSS的.htaccess重写规则失效问题排查

多域名站点CSS资源自动加载的.htaccess规则问题排查与解决

问题根源

  1. 重写循环与无存在性检查:原规则直接重写路径,既没排除已指向域名子目录的请求,也没检查目标文件是否存在,会导致重复重写或指向不存在的文件,最终返回404。
  2. HTTP_HOST含端口号:如果访问时带端口(比如localhost:8080),%{HTTP_HOST}会包含端口部分,而你的目录名大概率是纯域名,导致重写路径错误。

修复后的.htaccess配置

RewriteEngine On

# 跳过已指向域名子目录的请求,避免循环重写
RewriteRule ^assets/css/[a-zA-Z0-9.-]+/(.*)$ - [L]

# 提取不带端口的域名部分
RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9.-]+)(:[0-9]+)?$
# 确认目标CSS文件存在后再重写
RewriteCond %{DOCUMENT_ROOT}/assets/css/%1/$1 -f
RewriteRule ^assets/css/(.*)$ assets/css/%1/$1 [L]

# 原有路由转发规则,保持不变
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

配置细节说明

  • 防循环规则:匹配assets/css/域名/xxx.css格式的请求,直接跳过后续重写规则,避免路径被反复拼接。
  • 纯域名提取:通过正则捕获HTTP_HOST中不带端口的核心域名部分,解决带端口访问时路径不匹配的问题。
  • 存在性校验:先检查目标文件是否存在,只有文件真实存在时才执行重写,避免无效路径导致的404。

额外注意事项

  • 确保对应域名的CSS目录和文件已创建,比如访问example.com时,assets/css/example.com/styles.css必须存在。
  • 若仍有问题,可开启Apache重写日志(设置RewriteLogLevel 3),查看规则匹配过程,定位具体问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:22:28