7

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

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

http://yehaa.foo.com/

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

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

非常感谢

4

1 回答 1

12

根据我们的评论进行编辑

要访问http://foo.com/xyzPage.aspx?barvalue=yehaausing 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>

它匹配每个以 a 结尾或不以 a 结尾的 url/并使用之前的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>

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

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

重要提示:您可能需要安装和设置应用程序请求路由模块Rewrite,并启用代理模式到不同的域。

于 2013-03-07T15:47:18.217 回答