如何在 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
参数(并且只有这个参数)以及它的值是否不为空。
如果这两个条件都可以,它会触发Redirect
到http://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 中将 base64 图像 URL 转换为用户友好 URL