使用IIS URL Rewrite改写Oracle ORDS URL后出现404错误求助
问题背景
基于Oracle ORDS开发的REST API,原访问URL为:https://servername:8443/ords/schema_alias/module_name/handler_name/p1/p2
客户要求简化外部访问URL为:https://servername:8443/handler_name/p1/p2
通过IIS URL Rewrite配置实现规则:
- 匹配Pattern:
^handler_name/([_0-9-]+)/([0-9]+) - 动作类型:Rewrite
- 重写目标:
ords/schema_alias/module_name/handler_name/{R:1}/{R:2}
测试模式验证规则有效,但实际访问简化URL返回404错误,已确认C:\inetpub\wwwwroot\site_name\Web.config配置正确。补充:已添加C:\inetpub\wwwroot\b******MS文件夹,附上规则配置、错误信息、IIS站点截图,问题仍未解决。
排查步骤
检查IIS站点与ORDS的映射配置
确认IIS站点的ords虚拟目录物理路径是否正确指向ORDS部署目录,应用程序池权限是否足够访问ORDS文件。若ORDS未通过虚拟目录部署,需确认站点物理路径直接关联ORDS根目录。调整URL Rewrite规则细节
- 给重写目标URL添加开头斜杠,改为绝对路径格式:
/ords/schema_alias/module_name/handler_name/{R:1}/{R:2},避免相对路径解析错误。 - 检查Web.config中是否有优先级更高的规则(通过
order属性判断,值越小优先级越高),可将当前规则设为最高优先级。 - 确认规则是否区分大小写:若ORDS路由大小写敏感,需确保请求URL与规则Pattern的大小写一致,或开启规则的
ignoreCase属性。
- 给重写目标URL添加开头斜杠,改为绝对路径格式:
验证IIS代理模块配置
确保已安装Application Request Routing (ARR)模块,ORDS通过IIS转发请求依赖该模块支持。同时检查ARR是否启用了代理功能。排查物理目录冲突
确认站点根目录下不存在名为handler_name的物理文件夹,若存在,IIS会优先访问物理目录而非触发Rewrite规则,需删除或重命名该文件夹。分析日志定位问题
- 查看IIS站点日志(默认路径
C:\inetpub\logs\LogFiles),检查原始请求、重写后的URL及404错误的详细原因,确认规则是否实际生效。 - 查看ORDS日志(部署目录下的
logs文件夹),检查是否接收到IIS转发的请求,是否存在路由匹配失败的报错。
- 查看IIS站点日志(默认路径
内容的提问来源于stack exchange,提问作者JacquesB
相关产品推荐
相关产品推荐

