2012-05-31 72 views
2

當我將我的工作CI Web應用程序從本地主機移到網站主機時,遇到「重複和附加UR​​L」問題。爲什麼codeIgniter複製並追加URL?

在我的本地主機,這個工作(顯示登錄頁面):HTTP:// mylocal/someapp/ - >將重定向到http://mylocal/someapp/index.php/login

但是,遷移到虛擬主機,試圖訪問它像這樣經過:HTTP://webhosting.com/someapp/,不知它會自動追加到是 HTTP://webhosting.com/someapp/%20 //webhosting.com/someapp/index.php/login

我的.htaccess包含什麼(在本地主機上的作品)

在config.php,

$config['base_url']= ''; 

控制器,它會重定向到登錄控制器(那麼登錄查看)看起來像這樣:

class Home extends CI_Controller { 

function __construct() 
{ 
    parent::__construct(); 
} 

function index() 
{ 
    if($this->session->userdata('logged_in')) 
    { 
    $session_data = $this->session->userdata('logged_in'); 
    $data['username'] = $session_data['username']; 
    $this->load->view('home_view', $data); 
    } 
    else 
    { 
    //If no session, redirect to login page 
    redirect('login', 'refresh'); 
    } 
} 

function logout() 
{ 
    $this->session->unset_userdata('logged_in'); 
    session_destroy(); 
    redirect('home', 'refresh'); 
} 

} 

或者,也許在我需要配置的虛擬主機中的一些設置?

+0

嗯......很奇怪! – Jasonw

回答

0
$config['base_url']= ''; 

應包含您的網站的基本網址。我認爲這是問題所在。

應該是:

$config['base_url']= 'http://yoursite.com/'; 
+0

試過那個..沒有工作。 – glogor

0

找到了答案我自己。事實證明,一些虛擬主機沒有正確處理CI刷新。

header("Refresh:0;url=..."); 

相反,它只是想這樣:

header("Location: ..."); 

於是,我改變url_helper.php(系統/助理/ url_helper.php線:543),從

case 'refresh' 

case 'xxxrefresh' 

,以便它總是跳過標題刷新並僅使用標題位置。 我不知道這是否正確的解決方案,但它適用於我的網站。 從本地計算機遷移CodeIgniter代碼之前,測試您的虛擬主機特徵。

希望這有助於未來的某個人。

+1

你應該使用重定向('登錄');沒有'刷新'參數,那麼默認情況下會使用位置標題。修改內核也被認爲是不好的做法。當您將代碼更新到最新版本時,所有更改都將丟失。 –

+0

謝謝,這節省了我的時間 – Zyoo

+0

您應該在'redirect'函數中使用'method'參數,將其設置爲'location',而不是編輯核心類。看到這裏:https://www.codeigniter.com/user_guide/helpers/url_helper.html#redirect – clami219

4

在基址url前使用http://前綴$config['base_url']; 例如,

$config['base_url']=http://localhost/islam; 
+0

感謝您發佈這個問題的答案!在堆棧溢出中僅使用代碼解決方案(http://meta.stackexchange.com/a/148274),因爲沒有上下文的代碼轉儲不能解釋解決方案如何或爲什麼會起作用,這使得無法原始海報(或任何未來的讀者)瞭解其背後的邏輯。請編輯你的問題,幷包括你的代碼的解釋,以便其他人可以從你的答案中受益。 – AHiggins

0

我有同樣的 「複製問題」 與當地insallation。這裏是我的解決辦法:在設置在application/config/config.php文件的基本URL,例如:

$config['base_url'] = 'http://localhost/ci/'; 

添加http://https://前綴來解決「重複問題」是很重要的。當然,最後的斜線也是必要的。