Url IIS 10-如何实现重写路径的规则(…一点…)
使用IIS应用程序请求路由,我们将把请求代理到一个prepod服务器,该服务器为我们的开发、测试、qa和阶段环境托管服务。所有这些都是由于第三方软件的许可证问题,所以我们不能有单独的服务器和公共环境。因此,我们将在Prepod服务器上使用不同的端口和名称实现“相同”的站点/服务-前缀为环境Url IIS 10-如何实现重写路径的规则(…一点…),url,iis,url-rewriting,iis-10,Url,Iis,Url Rewriting,Iis 10,使用IIS应用程序请求路由,我们将把请求代理到一个prepod服务器,该服务器为我们的开发、测试、qa和阶段环境托管服务。所有这些都是由于第三方软件的许可证问题,所以我们不能有单独的服务器和公共环境。因此,我们将在Prepod服务器上使用不同的端口和名称实现“相同”的站点/服务-前缀为环境 MyServiceTest/mycode.svc MyServiceQA/mycode.svc MyServiceStage/mycode.svc 但是,另外,我们在pr环境中也有不同的DNS别名,所以我
- MyServiceTest/mycode.svc
- MyServiceQA/mycode.svc
- MyServiceStage/mycode.svc
- myalias.test.mycorp.com/MyService/mycode.svc
- myalias.qa.mycorp.com/MyService/mycode.svc
/{R:0}
但是如上所述,我需要将环境“偷偷”到pat的第一部分。这可行吗?明白了,不完全完美,但至少是一个可行的解决方案。阅读问题的答案后,我意识到即使IIS上的条件不使用正则表达式,我也可以创建捕获组。每个“*”将创建一个捕获组,然后“硬编码”url(因为我编写了所有规则的脚本,所以没有问题)并添加{c:2}
<rule name="ARR_MyService-8052_lb" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{HTTP_HOST}" pattern="myalias-test.mycorp.com" />
<add input="{REQUEST_URI}" pattern="/MyService*/*" />
</conditions>
<serverVariables></serverVariables>
<action type="Rewrite" url="http://myalias-test.mycorp.com-8052/MyServiceTest/{C:2}" />
所谓不完全完美,我的意思是,由于它使用通配符,您可以向/MyService/添加任何内容,但该规则仍然有效。但是,现在我只发现我可以在条件中使用通配符,所以我们可以接受它 当您为匹配URL启用正则表达式时,它将同时适用于条件模式 请将patternSyntax从通配符修改为ECMAScript。 无论QA测试阶段如何,此规则都将重写为后端MyServiceTest/*
<rule name="ARR_MyService-8052_lb" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
<match url="(.*)" />
<conditions trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="myalias-test.mycorp.com" />
<add input="{REQUEST_URI}" pattern="/MyService(Test|QA|Stage)/(.*)" />
</conditions>
<serverVariables></serverVariables>
<action type="Rewrite" url="http://myalias-test.mycorp.com-8052/MyServiceTest/{C:2}" />
</rule>
如果您想将MyServiceTest映射到后端MyServiceTest,并将MyServiceQA映射到后端MyServiceQA
那你可以试试这个
<rule name="ARR_MyService-8052_lb" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
<match url="(.*)" />
<conditions trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="myalias-test.mycorp.com" />
<add input="{REQUEST_URI}" pattern="/MyService(Test|QA|Stage)/(.*)" />
</conditions>
<serverVariables></serverVariables>
<action type="Rewrite" url="http://myalias-test.mycorp.com-8052/MyServiceTest{C:1}/{C:2}" />
</rule>
如果你改进正则表达式,答案当然是肯定的。不完全正确,因为条件不使用regex:-)“条件不使用regex”是错误的。它可能是regex的一个变体,但IIS至少在“正则表达式”和“通配符”方面非常清楚,所以请原谅我的法语回答确实为我解决了这个问题,在创建农场的脚本中做了更多的调整,但是这个答案是我从一开始就看到的。谢谢