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

如何将IIS的URL重写规则迁移至Docker环境下的NGINX

IIS重写规则转Docker环境Nginx配置方案

以下是完全匹配你原IIS规则逻辑的Nginx配置:

server {
    listen 80;
    server_name example.com;

    # 虚拟目录/we映射到容器内代码目录
    location /we {
        alias /var/app/we;
        # 优先访问真实文件/目录,不存在则触发重写
        try_files $uri $uri/ @frontend_controller;
    }

    # 处理根路径下的请求(如你的示例/sub1/test.cfm)
    location / {
        try_files $uri $uri/ @frontend_controller;
    }

    # 前端控制器重写逻辑
    location @frontend_controller {
        # 匹配排除路径,直接跳过重写(按实际路径存在情况调整)
        if ($request_uri ~* ^/(flex2gateway|jrunscripts|cfide|cfformgateway|railo-context|files|images|javascripts|miscellaneous|stylesheets|rewrite.cfm|index.cfm)) {
            return 404;
            # 若这些路径实际在/we目录下,替换为:rewrite ^(.*)$ /we$1 last;
        }

        # 执行重写,传递path_info参数,自动保留原查询字符串
        rewrite ^(.*)$ /we/index.cfm?path_info=$1 last;
    }
}

配置细节说明

  1. 虚拟目录映射:location /we 通过alias绑定到/var/app/we,确保/we路径下的静态文件能直接访问容器内的代码文件。
  2. 文件存在性校验:try_files指令先尝试加载请求的文件或目录,只有当文件不存在时才触发重写,对应IIS规则中IsFile negate=true的条件。
  3. 排除路径处理:通过正则匹配IIS规则指定的排除路径,匹配到的请求不执行重写逻辑。
  4. 重写逻辑:rewrite指令将符合条件的请求转发到/we/index.cfm,把原请求完整路径作为path_info参数传递,Nginx默认保留原查询字符串,对应IIS的appendQueryString=true。

Docker环境额外注意事项

  • 确保在docker-compose.yml或启动命令中正确挂载本地代码目录到容器:
    volumes:
      - ./本地we代码目录:/var/app/we
    
  • 检查容器对挂载目录的读写权限,避免因权限不足导致文件无法读取。
  • 若使用自定义Nginx镜像,需将上述配置文件复制到容器内的/etc/nginx/conf.d/目录下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:20:30