V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Infinitify
V2EX  ›  Cloudflare

请教一个规则设置

  •  
  •   Infinitify · 2021-12-31 06:40:12 +08:00 · 1856 次点击
    这是一个创建于 1063 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果一个动态 url 比如结尾为 https://bac.com/allproducts?w_id=456 想重写为 https://bac.com/allproducts?w_id=456

    该如何设置规则?测试了很久都不行,特来请教。

    12 条回复    2022-01-02 17:55:10 +08:00
    Chad0000
        1
    Chad0000  
       2021-12-31 06:52:34 +08:00 via iPhone
    URL 没有写错吧,这两个一模一样。
    Infinitify
        2
    Infinitify  
    OP
       2021-12-31 06:56:00 +08:00
    @Chad0000 没错,同一个 url,结尾数字不同
    Chad0000
        3
    Chad0000  
       2021-12-31 07:32:41 +08:00
    可以使用 regex_replace ,但我试了一下,免费版不支持正则,此路不通。看来你需要在你自己的原服务器上处理了。
    Infinitify
        4
    Infinitify  
    OP
       2021-12-31 08:06:04 +08:00
    @Chad0000 源服务器很麻烦,只能尽量在 CF 中处理了。

    请教下:Transform Rules 这个中的 rewrite to 的设置 static/dynamic 究竟如何理解?如何理解对应 rewrite 规则?符号 / 之后跟随是什么?
    cssk
        5
    cssk  
       2021-12-31 08:07:09 +08:00 via iPhone
    @Infinitify #2 都是 456
    Infinitify
        6
    Infinitify  
    OP
       2021-12-31 08:08:40 +08:00
    @Chad0000 请看截图
    [img][/img]
    Infinitify
        7
    Infinitify  
    OP
       2021-12-31 08:09:39 +08:00
    @cssk 不好意思,2#应该为非 456 其它任意数字。
    Chad0000
        8
    Chad0000  
       2021-12-31 08:16:03 +08:00
    看这个[官方介绍]( https://blog.cloudflare.com/introducing-transform-rules-with-url-rewriting-at-the-edge/)

    在第二个 Query 那边选 RewriteTo - Dynamic 。Dynamic 的意思就是你可以写表达式,它有内置变量和方法,其中正则就是一种,上面那个官方介绍里写了。你可以选 Dynamic 后填写类似 regex_replace("/foo/a/path", "^/foo/([^/]*)/(.*)$", "/bar/${2}/${1}")。其实主要也是它的 query 不支持 map 类型,否则可以直接使用 http.request.uri.query["w_id"]来获取你要的参数了。
    Chad0000
        9
    Chad0000  
       2021-12-31 08:25:33 +08:00
    如果你是收费套餐可以,否则你只能使用 Worker 了(注意免费版的数量和频率限制,不要影响到你的业务)
    Infinitify
        10
    Infinitify  
    OP
       2021-12-31 14:56:35 +08:00
    @Chad0000 方便留个 vx 请教下吗?
    Infinitify
        11
    Infinitify  
    OP
       2022-01-02 00:38:35 +08:00
    @Chad0000 我测试了下 catcon()还是不行
    如果可以达到 https://bac.com/ 或者 https://bac.com/allproducts
    写入到 https://bac.com/?w_id=456https://bac.com/allproducts?w_id=456 也可以
    Chad0000
        12
    Chad0000  
       2022-01-02 17:55:10 +08:00 via iPhone
    @Infinitify #11 在度假,回来了看看。如果只是路径替换你可以试试使用判定条件为 contains allproducts ,然路径手动改为 /,请求参数不变。就是你那个需求。你需要写清楚具体规则才好帮助到你。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1024 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:36 · PVG 05:36 · LAX 13:36 · JFK 16:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.