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

Nginx如何无需Lua将主机名子域名中的点替换为横杠

实现方案

纯原生Nginx无需依赖lua等第三方扩展,可通过递归逐次替换子域名中的.实现需求,完整配置如下:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    # 注意正则中的.需要转义,避免匹配任意字符
    server_name "~^(?<prefix>[\w\.]+)\.somedomain\.com$";

    set $converted_prefix $prefix;
    # 每次匹配到第一个.就替换为-
    if ($converted_prefix ~ "^(?<left>[^.]+)\.(?<right>.*)$") {
        set $converted_prefix "${left}-${right}";
        # 重新进入当前server块逻辑,执行下一次替换
        rewrite ^(.*)$ $1 last;
    }

    # 所有.替换完成后执行跳转
    return 302 $scheme://$converted_prefix.somedomain.com$request_uri;
}

注意事项

  • Nginx默认rewrite递归上限为10次,可覆盖99%的使用场景,如果你需要处理超过10级的子域名,可在http块中添加rewrite_recursion_limit 20;(需Nginx 1.19.8及以上版本)调整递归上限。
  • 测试阶段建议先用302跳转,确认规则完全符合预期后再改为301永久跳转,避免浏览器缓存错误的跳转规则。
  • 原配置中server_name的正则未对.做转义,可能出现意外匹配,以上配置已修复该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:21:01