summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-11-05 13:16:45 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-11-05 13:16:45 +0900
commit5e2a8b2d4cd861c66363707191b8fa88114f623a (patch)
tree1b39105320de201b8e427154e2a4b0f60323ddd8 /src
parent0b515d720412669fd2157ba7c3344a6c7199cd5e (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.cc13
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;
}