IIS URL重写动态文件夹数

时间:2016-02-01 14:42:09

标签: asp.net iis

我必须创建一个重写规则,捕获旧商店系统中的所有URL并将它们重定向到新商店。问题如下:

旧商店的源网址可以包含您找到产品编号的路径,如下所示:www.domain.com/folder1/folder2/folder3/[product number].html

folder1,folder2和folder3可以,但不需要在被调用的URL中。它们也没有固定(例如,folder1可以是“汽车”或“自行车”或“服务”)。该链接有时也可能是just www.domain.com/folder1/[product number].html甚至是www.domain.com/ [product number] .html。

对于新系统,我只需要目标网址中的[产品编号]。应如下所示:www.domain.com/path1/path2/[product number].aspx

我在谷歌或Stackoverflow中找不到任何帮助我的东西。

提前致谢

丹尼尔

1 个答案:

答案 0 :(得分:0)

这应该有效:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Three deep" stopProcessing="true">
                <match url=".*/.*/.*/(.*?).html" />
                <action type="Redirect" url="/path1/path2/{R:1}.aspx" />
            </rule>
            <rule name="Two deep" stopProcessing="true">
                <match url=".*/.*/(.*?).html" />
                <action type="Redirect" url="/path1/path2/{R:1}.aspx" />
            </rule>
            <rule name="One deep" stopProcessing="true">
                <match url=".*/(.*?).html" />
                <action type="Rewrite" url="/path1/path2/{R:1}.aspx" />
            </rule>
            <rule name="None deep" stopProcessing="true">
                <match url="(.*?).html" />
                <action type="Rewrite" url="/path1/path2/{R:1}.aspx" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

我担心表达式 - (.*?) - 我用于产品代码太多抓住所有,但我不知道你的结构产品代码。如果你能收紧它,那就更好了。

我还担心他们会点击那些不属于产品的东西(例如类别和搜索),所以如果所有产品网址都有一个支点,我建议使用它。收紧产品代码位也可能有助于错误匹配。

目前,它正在处理.html vs .aspx,而不是将其发送到重定向螺旋中。

我可以用更好的正则表达式做更少的规则,我今晚会有一个bash。