如何在IIS7上设置URL重写,以便多个子域重定向到正确的网站?

时间:2011-03-22 16:34:31

标签: asp.net iis-7 url-rewriting

我向previous question询问了如何让多个子域都指向同一个站点;我接受的答案是使用URL Rewrite。

冷却。但对于我的生活,我无法弄清楚URL Rewrite是如何工作的,我认为自己是一个相对聪明的人。 | - )很多问题......

  • 每个客户(并且将有数百个,如果不是数千个)获得他们自己的子域,例如customer1.mydomain.comcooldude.mydomain.com等。正则表达式为(.+)\.mydomain\.com,所有这些网址都应重定向到IIS上我已命名为customers.mydomain.com的网站。我在URL Rewrite上找到的所有示例都是关于引用文档,例如mydomain.com/thing.aspx?id=123更改为mydomain.com/thing/123,我对此并不感兴趣。以下是一条线索:正如您在下图中看到的那样,“输入”列始终显示“/'后面的网址路径” - 但似乎没有任何方法可以改变它。

URL Rewrite pic

  • 我假设重写规则应该放在默认网站上,但我希望规则重定向到customers.mydomain.com网站。你如何强制重定向到特定的网站,这样我仍然可以看到子域名(它决定了我登录的客户网站)?

3 个答案:

答案 0 :(得分:3)

我认为你想要做的就是为你的重写规则增加一个输入条件。您可以在http://learn.iis.net/page.aspx/469/using-rewrite-maps-in-url-rewrite-module/的“从重写规则中引用重写地图”部分阅读相关内容。

以下是我认为适合您的示例:

<rule name="My Rule">
    <match url="(.+)?" negate="false" />
    <action type="Redirect" url="http://{C:1}.mydomain.com/{R:0}" />
    <conditions>
    <add input="{HTTP_HOST}" pattern="(.+)\.mydomain\.com" />
    </conditions>
</rule>

答案 1 :(得分:0)

我在原来的问题上添加了一个答案,而原来的答案也会回答这个问题。我认为,对于您要做的事情,阅读主机标题比重定向更容易。

How to create subdomains for IIS7 programmatically?

答案 2 :(得分:0)

用户界面不是很好,但是这可以仅使用通过 Microsoft Web 平台安装程序安装的 IIS URL 重写模块 GUI 来完成,如 these instructions。据我所知,没有任何方法可以从值 URL path after '/' 更改 Input 列中的值,但您仍然可以选择目标目标(重写 URL ) 基于包括子域的整个 URL。

当您创建或编辑规则时,您采取的操作应设置为 Rewrite。操作属性的重写 URL 字段(目标地址)可以包括来自 IIS 的 built-in server variables(在这种情况下不够),以及来自您添加的条件的正则表达式捕获组。虽然您可能不希望条件过滤掉任何内容,但您可以创建一个足够通用的条件,该条件还可用于创建捕获组值以在 重写 URL 字段中引用。

在您的情况下,在 GUI 中编辑(或创建)重写规则,展开条件区域,并基于 SERVER_NAME 添加新条件。在您的情况下,您可以输入:

Condition input: {SERVER_NAME}
Check if input string: Matches the Pattern
Pattern: ^([-A-z0-9]+)\.(.*)$

如果您需要包含其他字符,您可能需要修改模式的第一部分。它匹配来自 www.google.com 等输入的子域。确保此正则表达式足够通用,不会过滤掉您要转发的任何内容,因为条件旨在充当过滤器。

如果您单击“测试模式”,您可以查看是否创建了有效的正则表达式,还可以查看捕获组的名称,稍后您将在重写 URL 字段中使用该名称。由于我没有创建任何其他条件,对于我的正则表达式,子域的值为 {C:1}

创建条件,然后转到操作属性重写 URL 字段。在你的情况下,你可以输入

http://example.com/{C:1}

这应该立即起作用,无需手动编辑默认网站的任何 XML 配置。