diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2011-11-05 13:16:45 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2011-11-05 13:16:45 +0900 |
| commit | 5e2a8b2d4cd861c66363707191b8fa88114f623a (patch) | |
| tree | 1b39105320de201b8e427154e2a4b0f60323ddd8 /src | |
| parent | 0b515d720412669fd2157ba7c3344a6c7199cd5e (diff) | |
Fixed bug that some information such as port number is lost if
redirect URI contains only path component.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Request.cc | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/Request.cc b/src/Request.cc index b710206d..7c80aa18 100644 --- a/src/Request.cc +++ b/src/Request.cc @@ -111,14 +111,17 @@ bool Request::redirectUri(const std::string& uri) { if(uri.find("://") == std::string::npos) { // rfc2616 requires absolute URI should be provided by Location header // field, but some servers don't obey this rule. + uri::UriStruct rus(us_); + rus.query.clear(); + rus.file.clear(); + size_t offset = 0; if(uri[0] == '/') { // abosulute path - redirectedUri = strconcat(us_.protocol, "://", us_.host, uri); - } else { - // relative path - redirectedUri = strconcat(us_.protocol, "://", us_.host, us_.dir, - "/", uri); + rus.dir.clear(); + offset = 1; } + redirectedUri = uri::construct(rus); + redirectedUri.append(uri.begin()+offset, uri.end()); } else { redirectedUri = uri; } |
