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

如何在.htaccess中配置CDN别名服务器的静态文件重写规则?

解决方案

要实现你需要的逻辑,核心是从请求的Host头中提取可变的CDN子域名部分,构造对应的实际文件路径进行存在性检查,具体的Apache Rewrite规则如下(放置在httpdocs/.htaccess中):

# 从Host头提取CDN子域名的后缀部分(如cdn-x.domain.com提取x)
RewriteCond %{HTTP_HOST} ^cdn-([a-z0-9-]+)\.domain\.com$ [NC]
# 将提取到的CDN标识存入环境变量
RewriteRule ^ - [E=CDN_ID:%1]

# 检查对应CDN目录下的文件/目录是否存在
RewriteCond %{DOCUMENT_ROOT}/../cdn/%{ENV:CDN_ID}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}/../cdn/%{ENV:CDN_ID}%{REQUEST_URI} !-d
# 文件不存在时转发到PHP脚本
RewriteRule ^(.*)$ notfound.php?val=$1 [L,QSA]

规则说明:

  1. 提取CDN标识:通过%{HTTP_HOST}匹配请求域名,用正则捕获cdn-后的子域名部分(如x、y),存入环境变量CDN_ID,[NC]表示不区分大小写匹配。
  2. 构造实际路径:利用%{DOCUMENT_ROOT}获取当前虚拟主机根目录(即httpdocs),通过../跳转到同级的cdn目录,拼接CDN_ID和请求URI,形成完整的实际文件路径。
  3. 存在性校验:通过!-f和!-d判断该路径下是否无对应文件或目录。
  4. 转发处理:当文件不存在时,将请求转发到notfound.php,[QSA]确保原请求的查询参数能被一并传递。

注意事项:

  • 确保Apache的mod_rewrite模块已启用。
  • 验证服务器权限,保证Apache进程能访问../cdn目录下的文件。
  • 若域名后缀有变动,需调整%{HTTP_HOST}的正则匹配规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:27:52