基于IIS实现反向代理以隐藏URI路径并解决图片加载问题
解决IIS反向代理隐藏子路径并修复静态资源加载问题
首先,你的核心问题是反向代理时既要隐藏/site1路径,又要让站点能正确找到位于根目录/moduls下的静态资源。下面是一套完整的URL Rewrite规则配置方案,结合ARR来实现需求:
1. 先确认ARR和URL Rewrite的基础配置
- 确保ARR的代理功能已开启:在IIS管理器的服务器级别,找到
Application Request Routing Cache→ 进入服务器代理设置→ 勾选「启用代理」 - 确认URL Rewrite模块已安装到目标站点(
globalsite1)的级别
2. 创建两条URL Rewrite规则
你需要两条规则配合:一条处理主站点的路径代理(隐藏/site1),另一条专门处理静态资源的转发(指向localsite/moduls)
规则1:主路径反向代理(隐藏/site1)
这条规则会把http://globalsite1/{*}的请求转发到http://localsite/site1/{*},同时排除静态资源路径:
- 打开
globalsite1站点的URL Rewrite模块,点击「添加规则」→ 选择「空白规则」 - 配置参数:
- 名称:Proxy to localsite/site1
- 匹配URL:
- 请求路径:
Matches the Pattern - 使用:
Regular Expressions - 模式:
(.*) - 忽略大小写:勾选
- 请求路径:
- 条件:
- 添加条件:输入
{REQUEST_URI},模式填^/moduls/.*,逻辑分组选Match All,勾选「否定」(意思是排除所有/moduls开头的请求)
- 添加条件:输入
- 操作:
- 操作类型:
Rewrite - 重写URL:
http://localsite/site1/{R:1} - 追加查询字符串:勾选
- 停止处理后续规则:勾选
- 操作类型:
规则2:静态资源代理(指向localsite/moduls)
这条规则专门处理图片等静态资源,把http://globalsite1/moduls/{*}直接转发到http://localsite/moduls/{*}:
- 再次添加空白规则
- 配置参数:
- 名称:Proxy to localsite/moduls
- 匹配URL:
- 请求路径:
Matches the Pattern - 使用:
Regular Expressions - 模式:
^moduls/(.*) - 忽略大小写:勾选
- 请求路径:
- 操作:
- 操作类型:
Rewrite - 重写URL:
http://localsite/moduls/{R:1} - 追加查询字符串:勾选
- 停止处理后续规则:勾选
- 操作类型:
3. 调整规则顺序
一定要把静态资源规则排在主路径规则的前面,这样请求会优先匹配静态资源规则,避免被主路径规则错误拦截。
4. 额外适配场景(可选)
如果你的站点里有相对路径引用资源(比如<img src="../moduls/img.jpg">),可能需要添加一条出站规则来修正响应中的URL:
- 操作类型选
Rewrite,匹配范围选Response - 匹配内容选
Contains,模式填/site1/moduls/(.*) - 重写值填
/moduls/{R:1}
测试时可以开启URL Rewrite的日志功能,查看请求的匹配情况,方便快速排查问题。
这样配置后,用户访问http://globalsite1时会代理到http://localsite/site1,访问http://globalsite1/moduls/xxx.jpg时会直接指向http://localsite/moduls/xxx.jpg,图片就能正常加载了。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

