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

能否在Nginx中改写URL时修改时间戳格式?

在Nginx中改写URL时修改时间戳格式的实现方法

可以通过Nginx的rewrite指令(结合正则捕获)或ngx_lua模块实现URL中时间戳格式的修改,以下是具体方案:

方案一:纯rewrite指令(固定秒数)

如果不需要动态获取秒数,可直接通过正则捕获调换日期部分,并补固定秒数和Z后缀:

server {
    # 其他配置...

    rewrite ^(/content/)(\d{2})-(\d{2})-(\d{4})T(\d{2}):(\d{2})(/.*)$ $1$4-$3-$2T$5:$6:00Z$7 permanent;
}

规则说明:

  • ^(/content/):捕获URL开头的/content/部分(对应$1)
  • (\d{2})-(\d{2})-(\d{4}):捕获原时间戳的日($2)、月($3)、年($4)
  • T(\d{2}):(\d{2}):捕获小时($5)和分钟($6)
  • (/.*)$:捕获时间戳后的剩余URL部分(对应$7)
  • 拼接后的新URL将日期格式调整为YYYY-MM-DD,补固定秒数00和Z后缀

方案二:使用ngx_lua模块(动态秒数)

如果需要动态获取当前秒数,Nginx原生rewrite无法实现,需借助ngx_lua模块:

server {
    # 其他配置...

    location /content/ {
        rewrite_by_lua_block {
            local uri = ngx.var.uri
            -- 匹配原URL的时间戳格式
            local pattern = "^(/content/)(%d%d)-(%d%d)-(%d%d%d%d)T(%d%d):(%d%d)(/.*)$"
            local _, _, prefix, day, month, year, hour, min, suffix = ngx.re.match(uri, pattern, "jo")
            
            if prefix then
                -- 获取当前秒数
                local sec = os.date("%S")
                -- 拼接新的时间戳和完整URL
                local new_timestamp = year .. "-" .. month .. "-" .. day .. "T" .. hour .. ":" .. min .. ":" .. sec .. "Z"
                local new_uri = prefix .. new_timestamp .. suffix
                -- 301永久重定向,可根据需求改为302
                ngx.redirect(new_uri, 301)
            end
        }
    }
}

注意事项:

  • 需确保Nginx已编译安装ngx_lua模块(或使用OpenResty)
  • 正则表达式需根据实际URL的时间戳变体调整,保证匹配准确
  • 重定向状态码(301/302)需根据业务需求选择

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:46:07