From 51263be0708a6803f044ac0da16bb22b26d1f8b2 Mon Sep 17 00:00:00 2001 From: saturneric Date: Sat, 8 Nov 2025 15:48:00 +0000 Subject: fix(redirect): lowercase repo names in redirect URLs * Ensures repository names in `/gpgfrontend/` redirects are always lowercase for consistency and compatibility. * Handles both direct and rewritten URLs, preserving query strings. * Improves URL normalization and prevents duplicate rewrite segments. --- lua/redirect_lower_url.lua | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'lua/redirect_lower_url.lua') diff --git a/lua/redirect_lower_url.lua b/lua/redirect_lower_url.lua index 74ffc30..5aae177 100644 --- a/lua/redirect_lower_url.lua +++ b/lua/redirect_lower_url.lua @@ -2,30 +2,39 @@ local r = lighty.r local a = r.req_attr --- Get the "original" path to avoid being affected by rewrites +-- Get the original path local raw = a["uri.path-raw"] or a["uri.path"] or "/" local orig = a["request.orig-uri"] or raw --- Match two entry points: --- 1) /GpgFrontend/... --- 2) /cgit.cgi/GpgFrontend/... (when the user accessed cgit.cgi directly) +-- Target path local new_path +-- 1) /GpgFrontend/... → /gpgfrontend/... if orig:match("^/GpgFrontend") then new_path = orig:gsub("^/GpgFrontend", "/gpgfrontend") +-- 2) /cgit.cgi/GpgFrontend/... → /gpgfrontend/... (let rewrite add /cgit.cgi once) elseif orig:match("^/cgit%.cgi/GpgFrontend") then - -- Convert /cgit.cgi/GpgFrontend/... to /gpgfrontend/... so rewrite adds /cgit.cgi only once new_path = orig:gsub("^/cgit%.cgi/GpgFrontend", "/gpgfrontend") end +-- If rule matches, convert repo name to lowercase if new_path then + -- Capture repo segment: /gpgfrontend//... + new_path = new_path:gsub("^(/gpgfrontend/)([^/]+)", + function(prefix, repo) + return prefix .. repo:lower() + end) + + -- Append query string local q = a["uri.query"] if q and #q > 0 and not new_path:find("%?") then new_path = new_path .. "?" .. q end + r.resp_header["Location"] = new_path return 301 end +-- Visible marker r.resp_header["X-Magnet-Probed"] = "1" return 0 \ No newline at end of file -- cgit