如何在不在服务器上实际创建子域的情况下将URL重写为asp.net中的子域

时间:2013-03-06 13:03:38

标签: asp.net c#-4.0 url-rewriting iis-7.5 subdomain

我希望这不是我第一次在SO上提出这个问题。

我的网站中有网址,并且使用的是query string个值 例如: http://foo.com/xyzPage.aspx?barvalue=yehaa

http://yehaa.foo.com/

请建议如何实现 而不在服务器上实际创建子域 ..

我已经 IIS 7.5 安装在服务器计算机上并使用 Asp.net 4.0

非常感谢

1 个答案:

答案 0 :(得分:12)

编辑以下评论:

要使用http://foo.com/xyzPage.aspx?barvalue=yehaa访问http://yehaa.foo.com/,您必须使用以下规则:

<rules>
    <rule name="Rewrite subdomains">
        <match url="^/?$" />
        <conditions>
            <add input="{HTTP_HOST}" pattern="^(.+)\.foo\.com$" />
        </conditions>
        <action type="Rewrite" url="http://foo.com?barvalue={C:1}" />
    </rule>
</rules>

它会匹配每个结束与否与/结尾的网址并使用foo.com之前的内容,然后将其重写为http://foo.com?barvalue={C:1},其中{C:1}foo.com之前输入的值http://foo.com?barvalue={C:1} 1}}。

如果您想阻止他人直接访问web.config,您可以使用以下规则。


您可以在<rewrite> <rules> <rule name="Redirect to Subdomains" stopProcessing="true"> <match url="^xyzPage.aspx$" /> <conditions> <add input="{QUERY_STRING}" pattern="^barvalue=(.+)$" /> </conditions> <action type="Redirect" url="http://{C:1}.{HTTP_HOST}" appendQueryString="false" /> </rule> </rules> </rewrite> 文件中添加以下规则来使用Rewrite module for IIS

xyzPage.aspx

检查网址是否与barvalue完全匹配(之前或之后没有任何内容) 它检查查询字符串是否包含Redirect参数(并且只包含此参数)以及它的值是否为空。
如果这两个条件没问题,则会触发http://barvalue.original.hostRewrite

您的问题指定type="Redirect",因此,如果这确实是您要执行的操作,请将操作type="Rewrite"更改为Rewrite

重要:您可能需要安装Application Request Routing module,并在启用代理模式的情况下将{{1}}设置为其他域。