将Rackspace Cloud文件从HTTP转换为HTTPS

时间:2012-03-26 16:23:00

标签: php replace rackspace-cloud

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

Rackspace Cloud Files CDN URL采用以下格式:

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

此URL的SSL等效项为:

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

对网址的更改为(source):

  1. HTTP变为HTTPS
  2. 第二个URI段(本例中为“r97”)变为'ssl'
  3. '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不起作用。

    任何想法都赞赏。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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;
    }
}