@@ -312,3 +312,47 @@ match meta: nil
312312matched: []
313313match meta: metadata /name
314314matched: {"_path":"/name/:name/id/:id"}
315+
316+
317+
318+ === TEST 10: /file/:filename (parameter with special symbol)
319+ --- config
320+ location /t {
321+ content_by_lua_block {
322+ local json = require("toolkit.json")
323+ local radix = require("resty.radixtree")
324+ local rx = radix.new({
325+ {
326+ paths = {"/file/:filename"},
327+ metadata = "metadata /file/:filename",
328+ },
329+ })
330+
331+ local opts = {matched = {}}
332+ -- test [";" | ":" | "@" | "&" | "="]
333+ local meta = rx:match("/file/123&45@dd:d=test;", opts)
334+ ngx.say("matched: ", json.encode(opts.matched))
335+ ngx.say("match meta: ", meta)
336+
337+ -- test uchar.unreserved.safe ["$" | "-" | "_" | "." | "+"]
338+ local meta = rx:match("/file/test_a-b+c.lua$", opts)
339+ ngx.say("matched: ", json.encode(opts.matched))
340+ ngx.say("match meta: ", meta)
341+
342+ -- test uchar.unreserved.extra ["!" | "*" | "'" | "(" | ")" | ","]
343+ local meta = rx:match("/file/t!e*s't,(file)", opts)
344+ ngx.say("matched: ", json.encode(opts.matched))
345+ ngx.say("match meta: ", meta)
346+ }
347+ }
348+ --- request
349+ GET /t
350+ --- no_error_log
351+ [error]
352+ --- response_body
353+ matched: {"_path":"/file/:filename","filename":"123&45@dd:d=test;"}
354+ match meta: metadata /file/:filename
355+ matched: {"_path":"/file/:filename","filename":"test_a-b+c.lua$"}
356+ match meta: metadata /file/:filename
357+ matched: {"_path":"/file/:filename","filename":"t!e*s't,(file)"}
358+ match meta: metadata /file/:filename
0 commit comments