Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions proxy/config/body_factory/default/redirect#moved_permanently
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<HTML>
<HEAD>
<TITLE>Document Has Moved</TITLE>
</HEAD>

<BODY BGCOLOR="white" FGCOLOR="black">
<H1>Document Has Moved</H1>
<HR>

<FONT FACE="Helvetica,Arial"><B>
Description: The document you requested has moved to a new location. The new location is "%<{Location}psh>".
</B></FONT>
<HR>
</BODY>
28 changes: 19 additions & 9 deletions proxy/http/HttpTransact.cc
Original file line number Diff line number Diff line change
Expand Up @@ -848,7 +848,6 @@ HttpTransact::EndRemapRequest(State* s)
build_error_response(s, HTTP_STATUS_MOVED_TEMPORARILY, "Redirect", "redirect#moved_temporarily",
"\"<em>%s</em>\".<p>", s->remap_redirect);
}
s->hdr_info.client_response.value_set(MIME_FIELD_LOCATION, MIME_LEN_LOCATION, s->remap_redirect, strlen(s->remap_redirect));
ats_free(s->remap_redirect);
s->reverse_proxy = false;
goto done;
Expand Down Expand Up @@ -882,6 +881,10 @@ HttpTransact::EndRemapRequest(State* s)
///////////////////////////////////////////////////////////////

if (!s->url_remap_success) {
if (handleIfRedirect(s)) {
DebugTxn("http_trans", "END HttpTransact::RemapRequest");
TRANSACT_RETURN(PROXY_INTERNAL_CACHE_NOOP, NULL);
}
/////////////////////////////////////////////////////////
// check for: (1) reverse proxy is on, and no URL host //
/////////////////////////////////////////////////////////
Expand Down Expand Up @@ -1242,25 +1245,25 @@ HttpTransact::handleIfRedirect(State *s)
answer = request_url_remap_redirect(&s->hdr_info.client_request, &redirect_url);
if ((answer == PERMANENT_REDIRECT) || (answer == TEMPORARY_REDIRECT)) {
int remap_redirect_len;
char *remap_redirect;

remap_redirect = redirect_url.string_get_ref(&remap_redirect_len);
s->remap_redirect = redirect_url.string_get(NULL, &remap_redirect_len);
redirect_url.destroy();
if (answer == TEMPORARY_REDIRECT) {
if ((s->client_info).http_version.m_version == HTTP_VERSION(1, 1)) {
build_error_response(s, HTTP_STATUS_TEMPORARY_REDIRECT,
/* which is HTTP/1.1 for HTTP_STATUS_MOVED_TEMPORARILY */
"Redirect", "redirect#moved_temporarily",
"%s <a href=\"%s\">%s</a>. %s",
"The document you requested is now",
remap_redirect, remap_redirect, "Please update your documents and bookmarks accordingly");
s->remap_redirect, s->remap_redirect, "Please update your documents and bookmarks accordingly");
} else {
build_error_response(s,
HTTP_STATUS_MOVED_TEMPORARILY,
"Redirect",
"redirect#moved_temporarily",
"%s <a href=\"%s\">%s</a>. %s",
"The document you requested is now",
remap_redirect, remap_redirect, "Please update your documents and bookmarks accordingly");
s->remap_redirect, s->remap_redirect, "Please update your documents and bookmarks accordingly");
}
} else {
build_error_response(s,
Expand All @@ -1269,10 +1272,10 @@ HttpTransact::handleIfRedirect(State *s)
"redirect#moved_permanently",
"%s <a href=\"%s\">%s</a>. %s",
"The document you requested is now",
remap_redirect, remap_redirect, "Please update your documents and bookmarks accordingly");
s->remap_redirect, s->remap_redirect, "Please update your documents and bookmarks accordingly");
}
s->hdr_info.client_response.value_set(MIME_FIELD_LOCATION, MIME_LEN_LOCATION, remap_redirect, remap_redirect_len);
redirect_url.destroy();
ats_free(s->remap_redirect);
s->remap_redirect = NULL;
return true;
}

Expand Down Expand Up @@ -8154,6 +8157,13 @@ HttpTransact::build_error_response(State *s, HTTPStatus status_code, const char
s->hdr_info.client_response.field_delete(MIME_FIELD_EXPIRES, MIME_LEN_EXPIRES);
s->hdr_info.client_response.field_delete(MIME_FIELD_LAST_MODIFIED, MIME_LEN_LAST_MODIFIED);

if ((status_code == HTTP_STATUS_TEMPORARY_REDIRECT ||
status_code == HTTP_STATUS_MOVED_TEMPORARILY ||
status_code == HTTP_STATUS_MOVED_PERMANENTLY) &&
s->remap_redirect) {
s->hdr_info.client_response.value_set(MIME_FIELD_LOCATION, MIME_LEN_LOCATION, s->remap_redirect, strlen(s->remap_redirect));
}


/////////////////////////////////////////////////////////////
// deallocate any existing response body --- it's possible //
Expand Down Expand Up @@ -8195,7 +8205,7 @@ HttpTransact::build_error_response(State *s, HTTPStatus status_code, const char
reason_phrase = reason_buffer;
}

if (s->http_config_param->errors_log_error_pages) {
if (s->http_config_param->errors_log_error_pages && status_code >= HTTP_STATUS_BAD_REQUEST) {
char ip_string[INET6_ADDRSTRLEN];

Log::error("RESPONSE: sent %s status %d (%s) for '%s'",
Expand Down