根据您实际尝试使用这些重定向来实现的内容而定,这可能很有用。如果您只是想从单个 Web 应用程序处理多个子域,您可以在 ASP.NET 之外完全通过使用基于 IIS 的服务器托管单个 Web 应用程序以及 ISAPI 重写工具(例如 Ionics Isapi Rewrite Filter(http://www.codeplex.com/IIRF))来模拟此子域行为,假设您有能力向您的托管环境添加 ISAPI 过滤器。
由于ISAPI过滤器在ASP.NET意识到请求前就已被处理,因此您可以仅从一个Web应用程序中托管多个子域(和完整域)。不幸的是,在ASP.NET内置Web服务器(Cassini)中模拟此类重定向是不可能的,因为它不使用ISAPI。此方法确实允许您在最终重定向位置测试最终子域的功能,但仅在Cassini中测试原始域映射也不可行,因为Windows hosts文件不允许使用端口规则。
如果您设置单一应用程序具有处理所有所需子域的功能页面,您可以将对子域的请求简单重定向到所需位置的单一应用程序中。这可以是单一应用程序中的页面文件夹,用于处理新子域的所有逻辑,非常简单。以下是一些用于Ionics的示例重写规则,将各种子域的请求发送到单个Web项目的最终位置:
RewriteCond %{HTTP_Host} ^(?~new-sub-domain.yourdomain.com).*$ [I]
RewriteRule ^(.*)$ http://www.yourdomain.com/new-sub-domain$1 [I,R=302]
RewriteCond %{HTTP_Host} ^(?~another-new-sub-domain.yourdomain.com).*$ [I]
RewriteRule ^(.*)$ http://www.yourdomain.com/another-new-sub-domain$1 [I,R=302]
# # is a comment marker in the rewrite files
# [I] at the end means case-insensitive
# [L] at the end means last rule (sending the request on but hiding the forward from the end user)
# [R] at the end means an official redirect and can be used instead of [L] (the end user will then see a new request, such as a 301 redirect using [R=301])
这将导致所有针对新子域的请求都将发送到现有项目中的一个目录中(分别是 /new-sub-domain/ 和 /another-new-sub-domain/ );这可以修改为将它们发送到项目中任何你想要的位置。
虽然这种方法使您能够从单个应用程序托管多个子域(以及可能的多个完整域),但 ASP.NET Web 服务器(Cassini)中的重定向/重写限制将使您仅限于测试这些最终位置的功能(例如,“/new-sub-domain/”)。