【问题标题】:URL rewriting with ISAPI Rewrite使用 ISAPI Rewrite 重写 URL
【发布时间】:2011-12-16 23:48:51
【问题描述】:

我正在尝试为产品创建过滤系统并保持 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 个婴儿车时有效,但如果只输入两个参数则无效。这快把我逼疯了!

任何线索将不胜感激。

杰森

【问题讨论】:

    标签: url-rewriting


    【解决方案1】:

    我认为你很接近 - 可能有一个更好的循环方法,但我确实倾向于按照你的方式进行。

    我知道您如何处理非捕获下划线,然后捕获下一个字符。不要寻找非斜线,而是寻找非下划线。使用非斜线,它将抓住第一组中的整个东西。也就是说,寻找下划线而不是下划线。

    然后(得到真正的修复),每个部分都需要是可选的 - 上面的规则要求四个部分。所以添加一个?到每一个的结尾,如:

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

    我留下了所需的第一组,因为它实际上应该在那里,并且 RewriteCond 无论如何都会检查它。

    【讨论】:

    • 哇,谢谢你的回答,我想没有人会看到这个问题,我今天回来试试这个!!!我确实有一个解决方法,对每个选项都使用一次重写!!!非常耗时,处理时间可能很长!
    • 嗨 Goodeye 这对我不起作用,我可以让第一次重写工作,即参数一个而不是其余的?
    • 我使用regex-expressions.info 的RegexBuddy 应用程序,但我也只是在regexlib.com 上尝试过。它起作用了,但我必须小心前面的斜线(或没有),在上面的双参数示例中,爬升后缺少连字符。也许就是这样?
    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多