Преобразование URL-адресов CDN Rackspace Cloud Files из HTTP в HTTPS

У меня есть ряд сохраненных URL-адресов CDN Rackspace Cloud Files, которые ссылаются на HTTP-адрес, и я хотел бы преобразовать их в эквивалент HTTPS.

URL-адреса CDN Rackspace Cloud Files имеют следующий формат:

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

И эквивалент SSL для этого URL будет:

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

Изменения в URL-адресе (источник ):

  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-адресов, где второй сегмент имеет другую длину.

Любые мысли оценены.


person Dan Murfitt    schedule 26.03.2012    source источник


Ответы (2)


Попробуй это:

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;
    }
}
person jessica    schedule 26.03.2012
comment
Только что проверил это, и оно работает с частями разной длины. Спасибо. - person Dan Murfitt; 26.03.2012
comment
Ура, могут быть некоторые синтаксические ошибки, так как я написал это с головы, но рад, что это работает! - person jessica; 26.03.2012

Я знаю, что это устарело, но если вы используете эту библиотеку: 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);
person mxlfa    schedule 09.04.2014
comment
Как узнать, что у вас плохая документация: вы натыкаетесь на соответствующий ответ Stack Overflow за 5 лет до того, как найдете его в официальной документации. - person Eddimull; 30.03.2019