我遇到IIS7集成管道网址重写问题。 对于我的特定场景,我需要重写/重定向部分初始请求,如下所示。
用户在浏览器地址栏中输入http://savecontoso.com/files/123456789/somefile.html
。
用户被重定向到http://savecontso.com/default.aspx?url=
(url="default.aspx?url={R:1}"
的结果)
仅当我创建初始请求http://savecontoso.com/default.aspx/files/123456789/somefile.html
时才会按预期工作。
我必须注意,服务器上有 /files/
和/123456789/
的实际目录,也没有任何名为somefile.html
的文件。我只需要将整个路径和文件名附加到查询字符串中。
这是我使用IIS而不是页面代码处理重定向/重写功能的第一天,我看了看周围的Learn.iis.net,Google等无济于事。我知道重写是在页面请求之前进行的,但出于某种原因,我的特定代码在触发重定向之前需要页面请求。
我怀疑是因为我没有在初始请求中触发条件?
<rewrite>
<rules>
<rule name="1" stopProcessing="true">
<match url="(.*)(/files/\d+/.*html$)" />
<action type="Redirect" redirectType="Permanent" url="default.aspx?url={R:1}" />
</rule>
</rules>
</rewrite>
答案 0 :(得分:2)
由于你的匹配模式,很可能它不起作用:
{R:1}
只会与您的模式中的(.*)
匹配,永远不会匹配files/123...
files/\d+...
而不是/files/\d+...
试试这个(对我来说很好):
<rule name="1" stopProcessing="true">
<match url="^files/\d+/.*\.html$" />
<action type="Redirect" url="default.aspx?url={R:0}" redirectType="Permanent" />
</rule>