Url rewriting 未拾取(虚拟)文件夹中web.config中的后续IIS重写规则

Url rewriting 未拾取(虚拟)文件夹中web.config中的后续IIS重写规则,url-rewriting,iis-7.5,Url Rewriting,Iis 7.5,TL/DR:在同一请求期间,是否可以将同一URI资源的多次重写(以及最终重定向)链接到位于URI路径子文件夹中的多个web.config文件上 我正在尝试将我的经典ASP网站从一个共享虚拟主机迁移到另一个共享虚拟主机;新的一个使用IIS7.5。我的网站有很多子域,新的宿主默认为每个子域使用一个真正的网站实例,但我的计划只允许其中的几个子域,而且由于它们的流量非常低,一个Web服务器实例应该可以做得很好。因此,我希望一个主要的网站实例只服务于所有子域 我在他们的服务器上的路径类似于D:\websi

TL/DR:在同一请求期间,是否可以将同一URI资源的多次重写(以及最终重定向)链接到位于URI路径子文件夹中的多个web.config文件上

我正在尝试将我的经典ASP网站从一个共享虚拟主机迁移到另一个共享虚拟主机;新的一个使用IIS7.5。我的网站有很多子域,新的宿主默认为每个子域使用一个真正的网站实例,但我的计划只允许其中的几个子域,而且由于它们的流量非常低,一个Web服务器实例应该可以做得很好。因此,我希望一个主要的网站实例只服务于所有子域

我在他们的服务器上的路径类似于
D:\websites\myaccount\mysite\wwwroot
。为了清洁起见(将子域中的所有文件分隔在各自的文件夹中),我在宿主根文件夹中为每个子域设置了一个单独的文件夹(例如,
D:\websites\myaccount\subdomain1
),并将wwwroot下的虚拟文件夹映射名称添加到这些子域文件夹中(例如,虚拟文件夹
子域1
映射到
D:\websites\myaccount\subdomain1

然后我将重写规则添加到主wwwroot文件夹的web.config中,以拦截子域的请求并重写它们以映射到虚拟文件夹

<rule name="Subdomain support" stopProcessing="false">
  <match url=".*" />
  <conditions>
    <add input="{HTTP_HOST}" pattern="^(subdomain1|subdomain2|subdomain3)\.mysite\.com$" />
  </conditions>
  <action type="Rewrite" url="{C:1}/{REQUEST_URI}" />
</rule>
这应该将浏览器从
subdomain1.mysite.com
重定向到
subdomain1.mysite.com/en/index.asp
(如果首选浏览器语言设置为“en.*”)

然而,无论我做什么,我都无法获取这些规则。我甚至通过匹配
*
并将重定向更改为指向例如google.com来测试这一点,但服务器只为我提供了一个403禁止,当我添加:

<directoryBrowse enabled="true" />

我收到了子域文件夹本身的文件夹列表。我的重定向开始尖叫“我对你毫无意义吗?!”,我想停止尖叫

但是,当我键入subdomain1.mysite.com/subdomain1/时,重定向确实会被拾取……我还尝试将其重写到wwwroot下的常规(非虚拟)文件夹中,并显示出完全相同的症状

我是否误以为这是可能的?可能是因为原始URI在文件夹路径中不包含间歇
…\subdomain1\…
部分,IIS没有考虑该文件夹的web.config吗


我的第一次尝试是使用.htaccess(.irwaccess)文件,但我很快发现它们不会继承(对吗?),所以我要查看web.config文件。

您的要求是重定向subdomain1.mysite.comsubdomain1.mysite.com/en/index.asp

然后重写到subdomain1.mysite.com/subdomain1/en/index.asp对吗

如果启用FRT,您将看到subdomain1下的重定向规则将永远不会执行。这是出于设计

在这种情况下,您只需将所有这些规则移动到根文件夹的web.config,并按如下方式修改顺序:


IIS支持根级别和应用程序级别的混合规则,但我认为在这种情况下不能将您的规则分开。

我既不能访问IIS的GUI界面,也不能访问FRT(我只能上载web.config文件),但我知道您要去哪里。我了解到,规则可以在web.config文件之间继承(追加/替换,对吗?),可以链接到同一个web.config文件中,但不能跨web.config文件链接。我猜当某个URI被某个web.config重写,从而指向磁盘上的另一个文件夹IIS(或重写模块)时不会加载新位置的web.config以继续,对吗?不幸的是,我不想将所有内容都混合到一个根web.config中(这将变得一团糟,我的站点的100%模块化特性将丢失),所以我选择了另一种选择——只需支付更多的费用,并让每个子域都成为自己的网站实例。谢谢您的回答!
<directoryBrowse enabled="true" />