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

将Apache .htaccess静态资源版本化重写规则转换为Nginx规则

静态资源版本化URL重写:Apache转Nginx正确方案

问题分析

原项目采用URL静态资源版本化,前端请求带时间戳版本号的资源(如assets/js/jquery.min.1661243858.js),服务器实际文件路径为assets/js/jquery.min.js。原Apache规则通过重写去掉版本号,当前Nginx规则未完全匹配原逻辑导致在ddev环境失效。

原Apache规则逻辑拆解

  • 仅当请求的文件不存在时触发重写
  • 匹配路径格式:[路径部分]/[文件名主体].[版本号].[后缀]
  • 重写目标:去掉中间的版本号,拼接为[路径部分]/[文件名主体].[后缀]

修正后的Nginx规则

location ~* ^(.*\/)?([a-zA-Z0-9\.\-]+)\.(\d+)\.(bmp|css|cur|gif|ico|jpe?g|js|png|svgz?|webp|webmanifest)$ {
    try_files $uri $1$2.$4;
}

规则说明

  1. 正则匹配优化:
    • ^(.*\/)?:捕获资源所在的路径部分(可选,适配根目录下的资源)
    • ([a-zA-Z0-9\.\-]+):捕获文件名主体(支持字母、数字、点、横杠,覆盖原规则的字符范围)
    • \.(\d+)\.:匹配中间的数字版本号部分
    • 后缀列表完全对齐原Apache规则,包含所有需要处理的资源类型
  2. try_files逻辑:
    • 先尝试访问请求的带版本号的文件($uri)
    • 若文件不存在,自动转向去掉版本号的实际文件路径($1$2.$4),与原Apache规则的RewriteCond %{REQUEST_FILENAME} !-f逻辑一致

当前规则失效原因

  • 后缀列表不全:未覆盖原规则中的bmp|cur|ico|svgz?|webmanifest等类型
  • 正则分组不够精准:原规则允许路径部分为空(根目录资源),当前规则的(.+)可能匹配异常
  • 若ddev环境中该规则放置位置靠后,可能被其他更优先的location规则覆盖,需确保该规则放在通用静态资源location之前

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:09:21