mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 05:47:34 +00:00
WebServer: Ensure directory listing URLs end with a slash
We will now send a redirect (301) if a directory listing is requested and the request URL doesn't end with a slash character. This makes relative file URLs that we generate in directory listings actually work as expected.
This commit is contained in:
parent
f88fe5dc3f
commit
7590270e13
2 changed files with 26 additions and 0 deletions
|
@ -91,6 +91,17 @@ void Client::handle_request(ByteBuffer raw_request)
|
|||
auto real_path = path_builder.to_string();
|
||||
|
||||
if (Core::File::is_directory(real_path)) {
|
||||
|
||||
if (!request.resource().ends_with("/")) {
|
||||
StringBuilder red;
|
||||
|
||||
red.append(requested_path);
|
||||
red.append("/");
|
||||
|
||||
send_redirect(red.to_string(), request);
|
||||
return;
|
||||
}
|
||||
|
||||
StringBuilder index_html_path_builder;
|
||||
index_html_path_builder.append(real_path);
|
||||
index_html_path_builder.append("/index.html");
|
||||
|
@ -125,6 +136,20 @@ void Client::send_response(StringView response, const Core::HttpRequest& request
|
|||
log_response(200, request);
|
||||
}
|
||||
|
||||
void Client::send_redirect(StringView redirect_path, const Core::HttpRequest& request)
|
||||
{
|
||||
StringBuilder builder;
|
||||
builder.append("HTTP/1.0 301 Moved Permanently\r\n");
|
||||
builder.append("Location: ");
|
||||
builder.append(redirect_path);
|
||||
builder.append("\r\n");
|
||||
builder.append("\r\n");
|
||||
|
||||
m_socket->write(builder.to_string());
|
||||
|
||||
log_response(301, request);
|
||||
}
|
||||
|
||||
void Client::handle_directory_listing(const String& requested_path, const String& real_path, const Core::HttpRequest& request)
|
||||
{
|
||||
StringBuilder builder;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue