【问题标题】: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, '/');
}
}