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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IIS重写规则以获取短划线分隔文件名的最后一部分相关的知识,希望对你有一定的参考价值。

我正在使用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>
答案

你的规则应该是这样的:

<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>

Regexp ^detail/.*-(d+).php$将匹配所有类似http://www.mywebsite.com/detail/name-of-my-product-XXXXXXXX.php的URL并将其重写为/detail/?npid=XXXXXXXX

以上是关于IIS重写规则以获取短划线分隔文件名的最后一部分的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp在iis下如何写规则url重写

CouchDB 重写规则以更新处理程序导致 405 方法不允许

使用短划线分隔符进行RegEX 14位数验证

IIS重写规则以重定向URL

SpringCloud实战(十六)-基于Gateway + nacos网关灰度发布(只控制到网关层,局限性太大,微服务复杂链路调用规则控制建议重写Ribbon,而不是只重写Gateway路由规则)(代

在 IIS 重写规则中排除路径?