使用codeigniter从子域提供静态内容?

时间:2012-11-21 18:16:53

标签: codeigniter static subdomain

我正在跨域分割资源。我已经阅读了几种不同的方法来处理这个问题。从我读到的正确处理方法是使用绝对路径与相对路径。如果这是真的,当我推动我的本地开发直播时,我将如何处理?域名不会从本地与实时匹配。

base_url仅在我阅读时允许单个域。我应该创建一个资产路径助手并自动加载吗?或者,我在这里缺少什么?

http://www.example.com would operate normally.
http://images.example.com/assets would point to my asset folder that exists in the root.

3 个答案:

答案 0 :(得分:0)

是的,你错过了服务器配置指向某些地方的部分,具体取决于所做的请求。这是在请求到达codeigniter附近的任何地方之前,因此请查看您的服务器软件手册,看看它是什么。

Apache虚拟主机的示例可能类似于

#httpd.conf:
<VirtualHost *:80>
        ServerName        example.com
        DocumentRoot      /var/www/http
        ErrorLog          /var/log/httpd/error_log
        TransferLog       /var/log/httpd/access_log
</VirtualHost>


<VirtualHost *:80>
        ServerName        images.example.com
        DocumentRoot      /var/www/http/assets
        ErrorLog          /var/log/httpd/error_log
        TransferLog       /var/log/httpd/access_log
</VirtualHost>

在此示例中,http://images.example.com/radical.gif的请求会在/var/www/assets/中查找名为radical的gif。

答案 1 :(得分:0)

您可以在资源网址的config / constants.php中定义一个常量并使用它:

define('ASSETS_URL', 'http://images.example.com/assets/');

当然,你会这样做:

<img src="'.ASSETS_URL.'image1.png" />

答案 2 :(得分:0)

经过进一步研究,这是我解决问题的方法。感谢Codeigniter论坛,帮助我找到这个解决方案。创建一个开关,检查站点所处的开发阶段,并相应地设置base_url和asset_url配置。

switch(ENVIRONMENT)  //set in index.php
{
  case 'development':
    $config['base_url'] = 'http://localhost/';
    $config['asset_url'] = 'http://localhost/assets/';
    break;
  case 'production':
    $config['base_url'] = 'http://yoursite.com/';
    $config['asset_url'] = 'http://assets.yoursite.com/';
    break;
}

然后只需扩展url_helper并创建一个函数来获取asset_url

if ( ! function_exists('asset_url'))
{
    function asset_url($uri = '')
    {
        $CI =& get_instance();
        return $CI->config->item('asset_url') . ltrim($path, '/');
    }
}