iis - IIS URL 重写存在子调用问题
问题描述
我有两个虚拟机。第一个(VM1)正在运行一个具有如下 URL 的 Web 应用程序:
VM1/服务台/客户/用户/登录
第二个(VM2)现在应该在不更改 URL 的情况下重定向到该地址,并且也不允许重定向到根 / 因为这是一个不同的 Web 应用程序。使用此重写规则可以相对轻松地工作:
<rule name="rewriteAll" stopProcessing="true">
<match url=".*" />
<action type="Rewrite" url="http://VM1/servicedesk/customer/user/login" />
</rule>
它基本上只是将所有内容从 VM2 重写为特定的 VM1 URL。我面临的问题是这个 Web 应用程序对同一 VM1 上的其他地址有许多 Ajax 调用。例如 VM1/rest/... 或 VM1/s/.... 我真的试图找到每个异常调用并在此默认重写之前创建一个规则。但由于其中一些是嵌套的并且可以更改,这不是一个好方法。所以我需要的基本上是在不更改 URL 的情况下重写不会破坏执行大量嵌套调用的应用程序。
解决方案
我发现我可以redirectRest
在现有rewriteAll
规则之前使用以下规则 () 来重定向子调用 (VM1/rest/..)。
<rule name="redirectRest" stopProcessing="true">
<match url="/.*" />
<action type="Redirect" url="http://VM1/{R:0}" />
</rule>
<rule name="rewriteAll" stopProcessing="true">
<match url=".*" />
<action type="Rewrite" url="http://VM1/servicedesk/customer/user/login" />
</rule>
所以基本上当我调用 VM1 时,第二条规则适用,我被重写为 web 应用程序。托管在那里的应用程序将调用例如 VM1/rest 触发第一条规则并将 Ajax 调用重定向到根。但是我发现 Ajax 调用没有遵循像 301 这样的重定向。
推荐阅读
- javascript - ASP.net 部分布局和 javascript 在发布到服务器后未运行
- linux - 查找列是否在范围内
- angular - Angular:如何将多个表单控件附加到表单组
- python - 根据相似性为单词分配类别
- c++ - 带有这个指针的 memcpy 安全吗?
- java - 让 Jetty 优雅地关闭启动失败的 webapp 上下文
- mysql - IN(CONCAT()) 未在 MySQL 中返回逗号分隔字符串的结果
- python - 为什么我包含的查询在 GeoDjango 的空间坐标中不起作用?
- java - 将特定的外部库包含到 Gradle 构建的 jar 文件中
- sql - 亚马逊红移中的 SQL 正则表达式 substr 函数