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

May*_*hak 5 asp.net subdomain url-rewriting iis-7.5 c#-4.0

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

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

http://yehaa.foo.com/

请建议如何在不在服务器上实际创建子域的情况下完成它.

我在服务器机器上安装了IIS 7.5并使用了Asp.net 4.0.

非常感谢

che*_*fly 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>
Run Code Online (Sandbox Code Playgroud)

它的每一个网址的结尾或不与匹配/,并在使用前的东西foo.com,然后将它改写到http://foo.com?barvalue={C:1}哪里{C:1}是什么值之前输入foo.com.

如果您想阻止人们直接访问http://foo.com?barvalue={C:1},您可以使用以下规则.


您可以通过在文件中添加以下规则来使用IIS重写模块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>
Run Code Online (Sandbox Code Playgroud)

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

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

重要提示:您可能需要安装应用程序请求路由模块,并在启用代理模式的情况下将Rewrite其设置为其他域.