diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php
index a64a02a4ed9fe589c4003e49025d1167e3b9abdf..4973f576ab6632afabdc35df597ec5dc4f44c830 100644
--- a/apps/files_external/lib/swift.php
+++ b/apps/files_external/lib/swift.php
@@ -32,6 +32,7 @@
 
 namespace OC\Files\Storage;
 
+use Guzzle\Http\Url;
 use Guzzle\Http\Exception\ClientErrorResponseException;
 use Icewind\Streams\IteratorDirectory;
 use OpenCloud;
@@ -123,7 +124,14 @@ class Swift extends \OC\Files\Storage\Common {
 		}
 
 		$this->id = 'swift::' . $params['user'] . md5($params['bucket']);
-		$this->bucket = $params['bucket'];
+
+		$bucketUrl = Url::factory($params['bucket']);
+		if ($bucketUrl->isAbsolute()) {
+			$this->bucket = end(($bucketUrl->getPathSegments()));
+			$params['endpoint_url'] = $bucketUrl->addPath('..')->normalizePath();
+		} else {
+			$this->bucket = $params['bucket'];
+		}
 
 		if (empty($params['url'])) {
 			$params['url'] = 'https://identity.api.rackspacecloud.com/v2.0/';
@@ -514,7 +522,16 @@ class Swift extends \OC\Files\Storage\Common {
 			$this->anchor = new OpenStack($this->params['url'], $settings);
 		}
 
-		$this->connection = $this->anchor->objectStoreService($this->params['service_name'], $this->params['region']);
+		$connection = $this->anchor->objectStoreService($this->params['service_name'], $this->params['region']);
+
+		if (!empty($this->params['endpoint_url'])) {
+			$endpoint = $connection->getEndpoint();
+			$endpoint->setPublicUrl($this->params['endpoint_url']);
+			$endpoint->setPrivateUrl($this->params['endpoint_url']);
+			$connection->setEndpoint($endpoint);
+		}
+
+		$this->connection = $connection;
 
 		return $this->connection;
 	}