1

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

就我所阅读的内容而言,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.
4

3 回答 3

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/一个名为激进的 gif。

于 2012-11-21T18:35:37.217 回答
0

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

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

那么你当然会这样做:

<img src="'.ASSETS_URL.'image1.png" />
于 2012-11-21T20:20:31.920 回答
0

经过进一步研究,这是我解决问题的方法。感谢 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, '/');
    }
}
于 2012-11-28T22:02:10.540 回答