0

我存储了一系列 Rackspace 云文件 CDN URL,它们引用了一个 HTTP 地址,我想将它们转换为 HTTPS 等价物。

Rackspace 云文件 CDN URL 采用以下格式:

http://c186397.r97.cf1.rackcdn.com/CloudFiles Akamai.pdf

此 URL 的 SSL 等效项是:

https://c186397.ssl.cf1.rackcdn.com/CloudFiles Akamai.pdf

对 URL 的更改是(source):

  1. HTTP 变成 HTTPS
  2. 第二个 URI 段(本例中为“r97”)变为“ssl”

'r00' 部分的长度似乎有所不同(因为有些是 'r6' 等),所以我无法将这些 URL 转换为 HTTPS。这是我到目前为止的代码:

function rackspace_cloud_http_to_https($url)
{
    //Replace the HTTP part with HTTPS
    $url = str_replace("http", "https", $url, $count = 1);

    //Get the position of the .r00 segment
    $pos = strpos($url, '.r');

    if ($pos === FALSE)
    {
        //Not present in the URL
        return FALSE;
    }

    //Get the .r00 part to replace
    $replace = substr($url, $pos, 4);

    //Replace it with .ssl
    $url = str_replace($replace, ".ssl", $url, $count = 1);

    return $url;
}

但是,这不适用于第二段长度不同的 URL。

任何想法表示赞赏。

4

2 回答 2

3

我知道这是旧的,但如果你使用这个库:https ://github.com/rackspace/php-opencloud你可以在对象上使用 getPublicUrl() 方法,你只需要使用以下命名空间

use OpenCloud\ObjectStore\Constants as Constant;

// Code logic to upload file
$https_file_url = $response->getPublicUrl(Constant\UrlType::SSL);
于 2014-04-09T15:04:34.007 回答
1

尝试这个:

function rackspace_cloud_http_to_https($url)
{
    $urlparts = explode('.', $url);

    // check for presence of 'r' segment
    if (preg_match('/r\d+/', $urlparts[1]))
    {
        // replace appropriate segments of url
        $urlparts[0] = str_replace("http", "https", $urlparts[0]);
        $urlparts[1] = 'ssl';

        // put url back together
        $url = implode('.', $urlparts);
        return $url;
    }
    else
    {
        return false;
    }
}
于 2012-03-26T16:41:35.370 回答