我必须创建一个重写规则,捕获旧商店系统中的所有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中找不到任何帮助我的东西。
提前致谢
丹尼尔
答案 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。