IIS 重写规则以获取破折号分隔文件名的最后部分
IIS Rewrite Rule to get last part of dash delimited filename
我正在使用 IIS 8.5 和重写模块,并试图提出一个规则来实现以下目标
实际URL
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.需要拉取文件名的最后一部分(永远是数字)
下面是我想出的,但这会导致站点上其他 url 出现问题,除了 /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>
正则表达式 ^detail/.*-(\d+).php$
将匹配所有这样的 URL http://www.mywebsite.com/detail/name-of-my-product-XXXXXXXX.php
并将它们重写为 /detail/?npid=XXXXXXXX
我正在使用 IIS 8.5 和重写模块,并试图提出一个规则来实现以下目标
实际URL 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.需要拉取文件名的最后一部分(永远是数字)
下面是我想出的,但这会导致站点上其他 url 出现问题,除了 /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>
正则表达式 ^detail/.*-(\d+).php$
将匹配所有这样的 URL http://www.mywebsite.com/detail/name-of-my-product-XXXXXXXX.php
并将它们重写为 /detail/?npid=XXXXXXXX