Hus*_*hsh 3 iis url-rewriting .net-core
我想将 iis 的子域重定向到 localhost:port 中的子域,我的 dotnet 核心应用程序正在运行。
只是我想像这样重定向:
xyz.example.com => xyz.localhost:4000
john.example.com => john.localhost:4000
test.example.com => test.localhost:4000
example.com => localhost:4000(没有子域地址重定向到 localhost:4000)
我如何使用 url 重写规则来做到这一点是 iis?
有一些针对一个子域的解决方案(如这个问题),但我的问题更笼统,将所有子域从一个域重定向到另一个域中的相应子域。
这是执行您要求的重定向的规则:
<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>
Run Code Online (Sandbox Code Playgroud)
这很简单:
<match url=".*" />匹配任何 URL。example.com在后面的条件中检查请求的 URL 是否在域中。match部分对我们的情况没有用,因为它使用没有主机名的 URL 部分(在第一个“/”之后)。
条件<add input="{HTTP_HOST}" pattern="^((.+.)?)example.com" />匹配域,如xyz.example.com或example.com。如果条件匹配,捕获组{C:1}将包含xyz.forxyz.example.com和空字符串 for example.com,将进一步使用。
<action type="Redirect" url="http://{C:1}localhost:4000{REQUEST_URI}" appendQueryString="false" />
结果 URL 构建为http://{C:1}localhost:4000{REQUEST_URI}. {C:1}将持有如上所述的子域名,并{REQUEST_URI}在主机名之后包含 URL 部分。我们也设置appendQueryString为,false因为查询是{REQUEST_URI}.
您应该添加这<rewrite>部分网站web.config下<system.webServer>。您也可以从 IIS 配置管理器手动配置它。这是此类配置的屏幕截图:
最后,这是一组演示如何更改 url 的测试:
[TestCase("http://xyz.example.com", "http://xyz.localhost:4000/")]
[TestCase("http://xyz.example.com/some/inner/path", "http://xyz.localhost:4000/some/inner/path")]
[TestCase("http://xyz.example.com/some/inner/path?param1=value1¶m2=value2", "http://xyz.localhost:4000/some/inner/path?param1=value1¶m2=value2")]
[TestCase("http://example.com", "http://localhost:4000/")]
[TestCase("http://example.com/some/inner/path", "http://localhost:4000/some/inner/path")]
[TestCase("http://example.com/some/inner/path?param1=value1¶m2=value2", "http://localhost:4000/some/inner/path?param1=value1¶m2=value2")]
public void CheckUrlRedirect(string originalUrl, string expectedRedirectUrl)
{
using (var httpClient = new HttpClient(new HttpClientHandler {AllowAutoRedirect = false}))
{
var response = httpClient.GetAsync(originalUrl).Result;
Assert.AreEqual(HttpStatusCode.MovedPermanently, response.StatusCode);
var redirectUrl = response.Headers.Location.ToString();
Assert.AreEqual(expectedRedirectUrl, redirectUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1760 次 |
| 最近记录: |