From 21042e4ea5e3b12a81121b19e89849c9efdf3c74 Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Sun, 19 Feb 2023 17:37:06 +0100 Subject: Fixed generated links --- weblog.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'weblog.cpp') diff --git a/weblog.cpp b/weblog.cpp index 68e6490..c29d2e4 100644 --- a/weblog.cpp +++ b/weblog.cpp @@ -192,6 +192,15 @@ namespace { return article.substr(0, pos); } + std::string get_rel_target(FCGX_Request& request) + { + std::string result{FCGX_GetParam("PATH_INFO", request.envp)}; + auto pos{result.find('?')}; + if (pos != result.npos) + result = result.substr(0, pos); + return result; + } + std::string plugin_path(FCGX_Request& request) { std::string target{FCGX_GetParam("DOCUMENT_URI", request.envp)}; @@ -199,7 +208,7 @@ namespace { target = target.substr(0, target.size() - 1); } - std::string rel_target{FCGX_GetParam("PATH_INFO", request.envp)}; + std::string rel_target{get_rel_target(request)}; while (rel_target.size() > 1 && rel_target.back() == '/') { rel_target = rel_target.substr(0, rel_target.size() - 1); } @@ -404,8 +413,8 @@ void generate_page(FCGX_Request& request, Config& config) rel_target = rel_target.substr(0, 4) + "/" + rel_target; } fs::path path {fs::path{path_translated} / rel_target}; - if (target.size() && target.back() != '/' && fs::is_directory(path)) { - std::string location{FCGX_GetParam("SCRIPT_NAME", request.envp) + "/"s}; + if (target.size() && target.back() != '/' && fs::is_directory(path) && !boost::algorithm::contains(target, "?")) { + std::string location{target + "/"s}; FCGX_FPrintF(request.out, "Location: %s\r\n", location.c_str()); return HttpStatus("301", "Correcting directory path", request); } -- cgit v1.2.3