我在应用程序中设置了一个文件夹结构,如下所示:
- c:\inetpub\wwwroot\contoso\public
- c:\inetpub\wwwroot\contoso\secured
我想将以下 URL 映射到这些文件夹结构:
- http://www.contoso.com/login -> \public\login.aspx
- http://www.contoso.com/myaccount -> \secured\myaccount.aspx
- http://www.contoso.com/(css|images|js)/ * -> \public(css|images|js)* (未在以下规则中表示)
我在服务器上安装了应用程序请求路由版本 2 。我的想法是我可以建立一些重写规则来为我做映射,比如这些......
<rewrite>
<rules>
<rule name="Rewrite pub page to aspx" stopProcessing="false">
<match url="^([a-z0-9/]+)$" ignoreCase="true" />
<conditions>
<add input="public\{REQUEST_FILENAME}.aspx" matchType="IsFile" ignoreCase="true" />
</conditions>
<action type="Rewrite" url="public/{R:1}.aspx" />
</rule>
<rule name="Rewrite sec page to aspx" stopProcessing="false">
<match url="^([a-z0-9/]+)$" ignoreCase="true" />
<conditions>
<add input="secured\{REQUEST_FILENAME}.aspx" matchType="IsFile" ignoreCase="true" />
</conditions>
<action type="Rewrite" url="secured/{R:1}.aspx" />
</rule>
<rule name="Rewrite 404 page to aspx" stopProcessing="true">
<match url="^([a-z0-9/]+)$" ignoreCase="true" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
</conditions>
<action type="Rewrite" url="public/default.aspx" />
</rule>
</rules>
</rewrite>
<location path="secured"><system.web><authorization><deny users="?"/></authorization></system.web></location>
<location path="public"><system.web><authorization><allow users="?,*"/></authorization></system.web></location>
在我看来,我是在告诉条件检查文件是否存在于公用文件夹中,如果存在,它将重写该文件。否则它将失败并查看文件是否存在于受保护的文件夹中,如果存在,它将重写该文件。否则它将被“catch all else”规则捕获,并将其指向默认页面。
但这不符合我的期望......我可以让它始终重写到一个文件夹,但我无法获得触发条件来检查是否存在文件。
有什么建议么?