IIS重写规则以获取短划线分隔文件名的最后一部分

时间:2017-12-26 19:13:16

标签: mod-rewrite iis url-rewrite-module

我正在使用IIS 8.5和重写模块,我试图想出一条规则来实现以下目标

实际网址 http://www.mywebsite.com/detail/name-of-my-product-3500.php

我想为上面的例子创建规则的重写将实现以下目的 http://www.mywebsite.com/detail/?id=3500

对于拥有.htaccess经验的人来说,我也很高兴能够分享一个等效的例子,因为我可以将其转换为IIS。

所以从本质上讲,我的web.config规则需要完成两件事 1.仅适用于/ detail目录 2.需要提取文件名的最后一部分(始终为数字)

以下是我提出的方法,但这会导致网站上的每个其他网址出现问题,除非在/ detail目录中显示。

<rule name="Redirect to detail" stopProcessing="true">
                <match url="([^-]+)\/?$" ignoreCase="false" />
                <action type="Rewrite" url="/detail/?npid={R:1}" appendQueryString="false" logRewrittenUrl="true" />
            </rule>

1 个答案:

答案 0 :(得分:0)

你的规则应该是这样的:

<rule name="Redirect to detail" stopProcessing="true">
    <match url="^detail/.*-(\d+).php$" ignoreCase="false" />
    <action type="Rewrite" url="/detail/?npid={R:1}" appendQueryString="false"/>
</rule>

正则表达式^detail/.*-(\d+).php$将与http://www.mywebsite.com/detail/name-of-my-product-XXXXXXXX.php之类的所有网址匹配,并将其重写为/detail/?npid=XXXXXXXX