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

如何使用Nginx实现URL重写:将路径转为子域名形式

可以通过Nginx实现该URL格式转换

完全可以通过Nginx配置实现从www.mydomain.com/city_name/item_id/到city_name.mydomain.com/item_id/的格式转换,具体分为旧URL重定向到新格式和新子域名请求处理两部分,以下是详细配置步骤:

前提准备

首先需要确保你的域名已配置泛解析,即*.mydomain.com指向你的Nginx服务器公网IP,否则子域名无法正常访问。

1. 旧URL重定向配置

如果需要将旧格式的请求自动跳转到新的子域名格式,添加以下server块:

server {
    listen 80;
    server_name www.mydomain.com;

    # 匹配www.mydomain.com/city_name/item_id/格式,重定向到对应子域名
    location ~ ^/([^/]+)/([^/]+)/$ {
        return 301 $scheme://$1.mydomain.com/$2/;
    }

    # 保留原www域名的其他业务配置
    # ...
}

2. 新子域名请求处理配置

配置Nginx接收所有子域名请求,并将子域名作为city_name映射到对应的目录或后端服务:

server {
    listen 80;
    server_name *.mydomain.com;

    # 排除主域名和www域名(避免和其他server块冲突)
    if ($host = mydomain.com) {
        return 301 $scheme://www.mydomain.com$request_uri;
    }
    if ($host = www.mydomain.com) {
        return 301 $scheme://www.mydomain.com$request_uri;
    }

    # 从子域名提取city_name
    set $city_name $host;
    if ($city_name ~* "^(.*)\.mydomain\.com$") {
        set $city_name $1;
    }

    # 示例1:静态文件场景,根目录指向对应城市的文件夹
    root /var/www/html/$city_name;
    index index.html index.htm;

    # 示例2:PHP后端场景,转发请求到对应城市的项目目录
    # location ~ \.php$ {
    #     fastcgi_pass 127.0.0.1:9000;
    #     fastcgi_param SCRIPT_FILENAME /var/www/html/$city_name$fastcgi_script_name;
    #     include fastcgi_params;
    # }

    # 处理item_id路径的路由(根据实际业务调整)
    location ~ ^/([^/]+)/$ {
        try_files $uri $uri/ /index.html; # 静态项目用这个
        # try_files $uri $uri/ /index.php?$args; # PHP项目用这个
    }
}

注意事项

  • 如果使用HTTPS,需要申请泛SSL证书(比如Let's Encrypt的泛证书),并在listen指令中添加443 ssl,同时配置ssl_certificate和ssl_certificate_key。
  • 修改配置后,执行nginx -t检查配置语法是否正确,无误后执行systemctl reload nginx生效配置。
  • 重定向使用301永久重定向,有利于搜索引擎优化;若仅需临时测试,可改为302临时重定向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:12:33