【问题标题】:Serving static content from subdomain with codeigniter?使用 codeigniter 从子域提供静态内容?
【发布时间】:2012-11-21 18:16:53
【问题描述】:

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

据我所知,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.

【问题讨论】:

    标签: codeigniter static subdomain


    【解决方案1】:

    是的,您缺少服务器配置根据发出的请求将内容指向特定位置的部分。这是在请求接近 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。

    【讨论】:

      【解决方案2】:

      您可以在 config/constants.php 中为您的资产 url 定义一个常量并使用它:

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

      那你当然会这样:

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

      【讨论】:

        【解决方案3】:

        经过进一步研究,这是我解决问题的方法。感谢 Codeigniter 论坛帮助我找到这个解决方案。创建一个开关,检查站点处于哪个开发阶段,并相应地设置 base_url 和 assets_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, '/');
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-24
          • 2015-11-16
          • 2018-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多