2012-11-21 90 views
1

我正在跨域分割資源。我已經閱讀了一些關於如何處理這個問題的不同方法。從我讀過的正確方法來處理是使用絕對路徑與相對路徑。如果這是真的,我會如何處理這個問題,因爲我推動了當地的發展?這些域名不會與本地或現場匹配。使用codeigniter從子域提供靜態內容?

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

進一步後研究這是我解決我的問題的方式。感謝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, '/'); 
    } 
} 
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。

0

您可以定義在配置/ constants.php恆定爲您的資產的網址,並使用它:

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

那麼你當然會去它像:

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