summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRoland Reichwein <mail@reichwein.it>2023-02-19 17:37:06 +0100
committerRoland Reichwein <mail@reichwein.it>2023-02-19 17:37:06 +0100
commit21042e4ea5e3b12a81121b19e89849c9efdf3c74 (patch)
treed00e57957beac8f714e03017932272058b8a752b
parent20fdb6e11f632a536f575efc02a9010a2e371cbf (diff)
Fixed generated links
-rw-r--r--weblog.cpp15
1 files changed, 12 insertions, 3 deletions
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);
}