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

Nginx子文件夹批量重定向及特殊字符处理问题求助

我来帮你搞定这个Nginx重定向的问题!你现在的配置有几个关键问题,而且完全不用写10行重复代码,用正则匹配就能一次性处理所有分类,同时搞定/category/本身的重定向需求。

首先先说说你现有配置的问题:

  • Nginx的正则location必须以~(大小写敏感)或~*(大小写不敏感)开头,你写的location /^category/1$会被当成普通前缀匹配,自然匹配不到任何请求;
  • 手动逐个写分类的方式太冗余,而且特殊字符的转义处理也不对。

下面是完整的解决方案,直接替换你现有相关配置即可:

server {
    listen 80;
    # 如果你的子域名是固定几个,保留原写法也可以;用通配符更灵活
    server_name *.domain.com;

    # 优先处理/category/本身的重定向,精确匹配优先级最高
    location = /category/ {
        return 301 /;
    }

    # 一次性匹配1-10的分类,正则捕获分类编号
    location ~ ^/category/(10|[1-9])$ {
        # 用单引号包裹重定向字符串,避免双引号被Nginx误解析
        return 301 '/#something-{"[$1]":"[]"}';
    }

    # 这里放你原有的其他配置,比如root、index、其他location等
    root /path/to/your/webroot;
    index index.html index.htm;
}

关键细节解释:

  1. 精确匹配/category/:
    用location = /category/是精确匹配,优先级比正则匹配高,确保访问/category/时直接跳转到根路径,不会被后面的正则规则干扰。

  2. 正则匹配分类路径:

    • ~ ^/category/(10|[1-9])$:这个正则确保只匹配1-10的分类(10单独列出来,[1-9]匹配1-9的单个数字),避免匹配11、12这类无效分类;
    • $1是正则捕获的分组,也就是你访问的分类编号(比如访问/category/3,$1就是3),直接替换到重定向地址里。
  3. 特殊字符处理:
    用单引号包裹整个重定向字符串,这样Nginx不会把JSON里的双引号当成配置的结束符,不需要额外转义,写法更清晰。另外#可以直接写,Nginx会正确处理,浏览器会自动解析为页面锚点。

验证步骤:

修改配置后,先执行nginx -t检查配置是否合法,确认没问题后执行nginx -s reload重新加载配置,然后测试各个分类路径和/category/的重定向效果就可以了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:26:25