Маскировка домена Codeigniter для корзины Amazon S3

В моем веб-приложении я использую корзину Amazon S3 для хранения изображений, и мне нужен хост codeigniter для отображения изображений из корзины S3, но с моим URL-адресом хоста.

Например:

mywebapp.com/products/image1.jpg будет отображать контент из mywebapp.s3.amazonaws.com/products/image1.jpg

Я использую Codeigniter и не уверен, справлюсь ли я с этой проблемой внутри своего проекта codeigniter или из других конфигураций.


person Yusuf Can Gürkan    schedule 15.10.2013    source источник
comment
Почему бы просто не использовать ссылку S3 напрямую, когда вам это нужно? По крайней мере, нам нужно знать, чего именно вы хотите достичь.   -  person xiankai    schedule 15.10.2013
comment
Я знаю, что это не нужно, но я просто подумал, что этот вид перенаправления URL-адресов будет казаться более профессиональным, а также я хочу, чтобы все мои URL-адреса имели одинаковое происхождение для лучшего вида.   -  person Yusuf Can Gürkan    schedule 15.10.2013
comment
Тогда вам нужно не перенаправление URL, а маскировка домена. en.wikipedia.org/wiki/Domain_Masking   -  person xiankai    schedule 16.10.2013


Ответы (1)


Сначала загрузите помощника URL в свой конструктор, если вы еще этого не сделали:

$this->load->helper('url');

тогда всякий раз, когда вам нужно перенаправление, вы можете просто позвонить:

$s3_url = "https://mywebapp.s3.amazonaws.com/products/image1.jpg";

// you can omit the last two parameters for the default redirect
redirect($s3_url, 'location', 301);

Я думаю, вам нужен сервис, в котором вы получаете доступ к URL-адресу и получаете изображение, вот мое решение

<?php if (!defined('BASEPATH')) die();
class Img extends CI_Controller {

    public function __construct ()
    {
        parent::__construct();

        $this->load->helper('url');

        // this is the db model where you store the image's urls
        $this->load->model('images_model', 'img_m');
    }

    // accessed as example.com/img/<image_id>
    // redirects to the appropiate s3 URL
    public function index()
    {
        // get the second segment (returns false if not set)
        $image_id = $this->uri->segment(2);

        // if there was no image in the url set:
        if ($image_id === false)
        {
            // load an image index view
            $this->load->view('image_index_v');
            exit;
        }

        $url = $this->img_m->get_url($image_id);

        // get_url() should return something like this:
        $url = "https://mywebapp.s3.amazonaws.com/products/image1.jpg";

        // then you simply call:
        redirect($url, 'location', 301);
    }
}
person Josue Alexander Ibarra    schedule 15.10.2013