当根目录包含重写时,为什么Azure Web App虚拟目录中的URL重写未被处理?

时间:2015-10-08 20:28:50

标签: azure url-rewrite-module virtual-directory

我在Azure Web App中有两个虚拟目录,并确认它们正在作为应用程序目录正常工作。

Web应用程序的根目录除了包含两个重写规则的web.config文件之外什么也没有,导致子域指向这样的子文件夹:

<rule name="App1 Subdomain Redirect to SubFolder">
    <match url=".*" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="^app1.myservice\.net$" />
    </conditions>
    <action type="Rewrite" url="/app1/{R:0}" />
</rule>   

<rule name="App2 Subdomain Redirect to SubFolder">
    <match url=".*" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="^app2.myservice\.net$" />
    </conditions>
    <action type="Rewrite" url="/app2/{R:0}" />
</rule>

(我知道这可以更有效地编写 - 我试图删除尽可能多的变量。)

在每个虚拟目录中,我有另一个web.config,它包含一个添加扩展名的规则:

<rule name="Add Extension">
    <match url=".*" negate="false" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        <add input="{URL}" pattern="(.*)\.(.*)" negate="true" />
    </conditions>
    <action type="Rewrite" url="{R:0}.ashx" />
</rule>

我遇到的问题是&#34;添加扩展程序&#34;规则永远不会被处理。

如果我从虚拟目录的配置文件中删除规则并将其放入root用户,那么一切都很好。 (如果我只针对一个虚拟目录执行此操作,则该目录适用于该目录,而另一个则不适用。如果我同时执行此操作,则会处理所有规则。)

如果我删除&#34;添加扩展名&#34;规则并尝试其他规则不会被处理的其他规则,这表明这不是特定于此特定规则的问题。

如果我从root配置中删除所有规则,则会处理虚拟目录中的所有规则。

我的问题是,是否有其他人经历过这一点以及他们做了什么作为解决方法?

我的理解是规则应该以与其他配置设置相同的方式从根目录级联到虚拟目录。

搜索没有帮助。

Anand似乎在非Azure IIS网站上遇到了同样的问题,但未提出任何答案:http://forums.iis.net/t/1178488.aspx

Zielu1的问题有些相似,但又未收到回复:IIS URL rewrite in child virtual directory not redirecting

关于重写有很多其他问题,主要是关于语法并让它们一般工作,但很少有关于规则的虚拟目录继承。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

尝试匹配完整的子目录路径

return this;