我有一个折扣 asp.net 帐户,它使用 IIS 7,我想配置子域以指向网站上的特定应用程序。
例如:
“s1.site.com”将在“site.com/serverone”上运行应用程序。我希望子域名不透明,这样用户就不必处理 /serverone 部分。
关于服务器故障有一个类似的问题,但它涉及为每个子域创建一个全新的站点,而我宁愿只路由到每个子域的子目录中的独立应用程序。
另外,asp.net 还提供了基于脚本的编程解决方案,但这显然是一种不太理想且灵活的解决方案,并且可能会导致性能下降(虽然我没有实际测量过这两种方法之间的差异)。
答案1
我不确定 discount aps.net 的控制面板是如何工作的,但如果你直接在 IIS 中执行此操作,则需要为每个应用程序创建一个单独的站点,不一定是每个子域,如果每个应用程序有多个子域,则为每个子域的 URL 设置绑定。每个站点的根目录将是您的应用程序文件夹。您不能只使用主站点的子文件夹,因为您无法将绑定添加到文件夹。
或者,您可以使用URL 重写将 site.com/serverone 的请求重写为 s1.site.com
答案2
使用URL 重写,Sam Cogen 提到的,它会自动安装在任何折扣 asp.net 帐户中(并且可以安装到任何 IIS7 服务器),我创建了一个重写规则来解决我的问题。
笔记:discount asp.net 的工作人员表示,除了编程脚本之外,重写规则是在他们的帐户上实现此目的的唯一方法。Discount asp.net 提供了一个编程脚本(我说是 hack),它将子域路由到子目录,但我需要比这种解决方案提供的更多的灵活性和性能。
如果未安装 IIS 7 重写模块,您将必须找到该模块(可能在微软的 IIS 网站上),然后安装它。
在 IIS 中安装重写模块后,使用 IIS 管理器连接到它。
确保您拥有根级别创建规则时所选网站的名称(而不是应用程序所在的子目录),这一点非常重要,因为它导致我犯了一个严重的错误,浪费了一些时间。重写规则可以应用于目录层次结构中的不同级别,导致规则根据规则在目录层次结构中的位置而产生不同的效果(我相信在创建规则时,它会对本地 web.config 进行更改,但我还没有花时间确认这一点)。这也意味着当您在另一个目录中更改规则时,您无法看到在其他目录中设置的规则。
选择重写的根目录很重要,因为您要将所有子域名 URL 重新路由到子目录 URL(已路由到子目录的 URL 除外)。
选择根站点目录后,双击URL 重写,进入改写区域。然后点击添加规则并创建一个空白规则。
对于匹配
图案使用:^(?!serverone/)(.*)
并设置
请求的 URL:到 '匹配模式', 和
使用到常用表达。
这将通过此规则路由任何 url,忽略那些已经前往正确子域的 url,但我们希望限制重写路由 url 中没有子域的内容,因此接下来我们将添加一个条件。
它只需要一个条件,使用{HTTP_HOST}
for输入,其模式为:s1.site.com
最后,对于操作,你需要一个'动作类型' 的 '改写' 附加查询字符串值。
重写 URL 应为: serverone/{R:0}
。