IIS URL重写:如果特定路径中的文件不存在,则重写

时间:2015-12-01 00:20:15

标签: iis url-rewriting

我对IIS的URL重写模块有一个看似简单的要求,我似乎无法为单页Web应用程序工作。我有一个根文件夹Dictionary<string, string> Numbers = new Dictionary<string, string> { {"100","+100"}, {"24","+24"}, {"214","+214"}, {"3","+3"}, {"1","+1"}}; Numbers = Numbers.OrderBy(key => int.Parse(key.Key)).ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value); SortedDictionary<int, string> Numbers1 = new SortedDictionary<int, string> { {100,"+100"}, {24,"+24"}, {214,"+214"}, {3,"+3"}, {1,"+1"}}; ,里面有一个文件夹content。 URL在根位置使用dashboard(即从URL中省略dashboard)。如果网址与任何文件匹配,我希望它可以提供,否则,我希望它在信息中心文件夹中提供content。唯一的复杂因素是仪表板位于文件系统的index.html文件夹中,但URL中不存在content

这是我的文件夹结构:

content - &gt;为URL提供此服务:/content/dashboard/foo.txt

/dashboard/foo.txt - &gt;为URL提供此服务:/content/dashboard/assets/image.jpg

/dashboard/assets/image.jpg - &gt;如果没有匹配

的文件,请为以/content/dashboard/index.html开头的任何网址提供此服务

以下是我的重写规则:

/dashboard/

即使我上面有 <rules> <rule name="dashboard assets" stopProcessing="true"> <match url="^dashboard(.*)$" /> <conditions logicalGrouping="MatchAll"> <add input="content/{REQUEST_FILENAME}" matchType="IsFile" negate="false" /> </conditions> <action type="Rewrite" url="content/dashboard{R:1}" /> </rule> <rule name="dashboard app" stopProcessing="true"> <match url="^dashboard(.*)$" /> <action type="Rewrite" url="content/dashboard/index.html" /> </rule> </rules> 条件,它似乎永远不会使用它并始终为index.html提供服务。我怎么能纠正这个?

1 个答案:

答案 0 :(得分:0)

{REQUEST_FILENAME}返回所请求文件的完整本地目录路径。例如/content/dashboard/assets/image.jpg变量{REQUEST_FILENAME}实际上是C:\ inetpub \ wwwroot \ content \ dashboard \ assets \ image.jpg

从条件输入中删除内容/它应该可以正常工作。