我正在跨域分割资源。我已经阅读了几种不同的方法来处理这个问题。从我读到的正确处理方法是使用绝对路径与相对路径。如果这是真的,当我推动我的本地开发直播时,我将如何处理?域名不会从本地与实时匹配。
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.
答案 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, '/');
}
}