Fix redirect for mounted folders (#2628)

A directory request without a trailing slash was redirected to the path
relative to the mount point, so /mount/dir under a mount at /mount sent
Location: //dir/ instead of /mount/dir/. Redirect to the request path
with the slash appended.
This commit is contained in:
mervindejong authored and GitHub committed 2026-10-14 15:35:27 -04:00
1 parent c419c904da
commit 924b5cecf0
2 files changed
+8 -1

No files matched your search

+1 -1
View File
@@ -13869,7 +13869,7 @@ inline bool Server::handle_file_request(Request &req, Response &res) {
detail::FileStat stat(path);
if (stat.is_dir()) {
res.set_redirect(sub_path + "/", StatusCode::MovedPermanently_301);
res.set_redirect(req.path + "/", StatusCode::MovedPermanently_301);
return true;
}
+7
View File
@@ -6660,6 +6660,13 @@ TEST_F(ServerTest, GetMethodOutOfBaseDirMountWithBackslash) {
EXPECT_EQ(StatusCode::NotFound_404, res->status);
}
TEST_F(ServerTest, GetMethodDirMountWithoutTrailingSlash) {
auto res = cli_.Get("/mount/dir");
ASSERT_TRUE(res) << "Error: " << to_string(res.error());
EXPECT_EQ(StatusCode::MovedPermanently_301, res->status);
EXPECT_EQ("/mount/dir/", res->get_header_value("Location"));
}
TEST_F(ServerTest, PostMethod303) {
auto res = cli_.Post("/1", "body", "text/plain");
ASSERT_TRUE(res) << "Error: " << to_string(res.error());