我想将来自iis的子域重定向到我的dotnet核心应用程序正在运行的localhost:port中的子域。
我想要像这样重定向:
xyz.example.com => xyz.localhost:4000
john.example.com => john.localhost:4000
test.example.com => test.localhost:4000
example.com => localhost:4000(没有子域地址重定向到localhost:4000)
我如何使用网址重写规则执行此操作?是?
有一个子域名的解决方案(例如此question)但我的问题更为笼统,即将所有子域名从一个域名重定向到另一个域名中的相应子域名。
答案 0 :(得分:1)
以下是执行您要求的重定向的规则:
<rewrite>
<rules>
<rule name="Test Rule" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^((.+.)?)example.com" />
</conditions>
<action type="Redirect" url="http://{C:1}localhost:4000{REQUEST_URI}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
这很简单:
<match url=".*" />
匹配任何网址。请求URL是否在example.com
域中,将在以后检查。 match
部分对我们的案例没用,因为它使用没有主机名的URL部分(首先是'/')。
条件<add input="{HTTP_HOST}" pattern="^((.+.)?)example.com" />
匹配xyz.example.com
或example.com
等域名。如果条件匹配,则捕获组{C:1}
将包含xyz.
的{{1}}和xyz.example.com
的空字符串,将进一步使用。
example.com
结果网址构建为<action type="Redirect" url="http://{C:1}localhost:4000{REQUEST_URI}" appendQueryString="false" />
。 http://{C:1}localhost:4000{REQUEST_URI}
将保留如上所述的子域名,{C:1}
包含主机名后面的URL部分。我们还将{REQUEST_URI}
设置为appendQueryString
,因为查询是false
的一部分。
您应该将此{REQUEST_URI}
部分添加到<rewrite>
下的网站web.config
。您也可以从IIS配置管理器手动配置它。以下是此类配置的屏幕截图:
最后,这是一组演示如何更改网址的测试:
<system.webServer>