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

Posted

技术标签:

【中文标题】如何在 asp.net 中将 URL 重写为子域而不实际在服务器上创建子域【英文标题】:How to rewrite URL as subdomain in asp.net without actually creating a subdomain on server 【发布时间】:2013-02-21 06:54:47 【问题描述】:

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

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

http://yehaa.foo.com/

请建议如何实现它无需在服务器上实际创建子域 ..

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

非常感谢

【问题讨论】:

您可以使用 IIS 的重写模块来完成。 请举个例子..? 【参考方案1】:

编辑跟随我们的 cmets:

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

<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,你可以使用下面的规则。


您可以通过在web.config 文件中添加以下规则来使用Rewrite module for IIS:

<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 参数(并且只有这个参数)以及它的值是否不为空。 如果这两个条件都可以,它会触发Redirecthttp://barvalue.original.host

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

重要提示:您可能需要安装 Application Request Routing module 并将代理模式启用为 Rewrite 到另一个域。

【讨论】:

@MayankPathak 当您说“没有在服务器上实际创建子域”时,您希望用户看到什么?服务器应该如何知道要渲染什么内容? @nicolas.. 我想要的是,会有一个页面,产品将在页面上由query string 变化。基于查询字符串,我想创建子域...我只想将 URL 重写为子域.. @MayankPathak 我仍然不清楚的是:您的真实网址(有效的网址)是http://foo.com/xyzPage.aspx?barvalue=yehaa,您希望您的用户在浏览器中将其视为http://yehaa.foo.com/?还是相反?还是我错过了什么? 您可以尝试使用failed request tracing tool 来查看404 来自哪里吗?这是一个 5 分钟的设置,可以提供很多帮助。 我也遇到了类似的情况。那是 404。但我怀疑它是因为我的服务器由两个域共享。任何人都可以列出我需要在我的网站上拥有的绑定吗?我怀疑我也缺少一些绑定。

以上是关于如何在 asp.net 中将 URL 重写为子域而不实际在服务器上创建子域的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET URL 重写

如何在 ASP.NET 中将文件路径转换为 ​​URL

如何在 ASP.NET 中将 base64 图像 URL 转换为用户友好 URL

如何在asp.net web api中将图像路径转换为http url?

如何正确 URL 重写图像? C# ASP.NET

ASP.Net MVC 允许 URL 中的子域