Url rewriting 使用ISAPI重写进行URL重写

Url rewriting 使用ISAPI重写进行URL重写,url-rewriting,Url Rewriting,我正在尝试为产品创建一个过滤系统,并保持URL的友好性,我正在使用一个映射文件作为过滤参数,并重新编写以下代码 url可以包含一个参数或10个参数,并将按如下方式构建 Start URL: www.domain.com/climbing-frames/ First Param: www.domain.com/climbing-frames_rockwall/ Second Param: www.domain.com/climbing frames_rockwall_rope-ladder/ 等

我正在尝试为产品创建一个过滤系统,并保持URL的友好性,我正在使用一个映射文件作为过滤参数,并重新编写以下代码

url可以包含一个参数或10个参数,并将按如下方式构建

Start URL: www.domain.com/climbing-frames/
First Param: www.domain.com/climbing-frames_rockwall/
Second Param: www.domain.com/climbing frames_rockwall_rope-ladder/
等等

到目前为止的重写规则

 RewriteMap features txt:features.txt
    RewriteCond ${features:$1|NOT_FOUND} !NOT_FOUND
    RewriteRule ^climbing-frames(?:_([^/]+))(?:_([^/]+))(?:_([^/]+))(?:_([^/]+))/ /get-features.cfm?(?1(param1=${features:$1|0}))(?2(,${features:$2|0}))(?3(,${features:$3|0}))(?4(,${features:$4|0}))
如果输入了4个婴儿车,则此功能有效,但如果只输入了两个参数,则不起作用。这快把我逼疯了

任何线索都将不胜感激


Jason

我认为你已经接近了——也许有一种循环方法会更好,但我确实倾向于按照你的方式去做

我看到您是如何执行非捕获下划线,然后捕获下一个字符的。不要查找not斜杠,而要查找not下划线。如果不是斜线,它将在第一组中抓住整个东西。也就是说,查找下划线而不是下划线

然后进入真正的修复,每个部分都需要是可选的-上面的规则需要四个部分。那么添加一个?至每一条的末尾,如下所示:

RewriteRule ^climbing-frames(?:_([^_]+))(?:_([^_]+))?(?:_([^_]+))?(?:_([^_]+))?/

我留下了第一组要求的内容,因为它实际上应该在那里,重写器正在检查它。

哇,谢谢你的回答,我认为没有人看到这个问题,我今天回来后会尝试这个!!!我确实有一个工作在地方使用一个单一的重写每个选项!!!非常耗时,处理时间可能很长!你好,Goodeye,这对我不起作用,我可以让第一次重写生效,即param one,但其余的不行?我使用正则表达式.info的RegexBuddy应用程序,但我也只是在regexlib.com上尝试过。它起作用了,但我必须小心前面的斜杠,在上面的双参数示例中,爬山后缺少一个连字符。也许就是那种事?