2012-05-01 154 views
3

我遇到了路由問題。我的默認控制器(mysite.com)可以工作,但如果我嘗試其他任何東西(例如mysite.com/dashboard),它將轉到基於404的服務器,而不是CodeIgniter。這非常令人困惑,因爲目前我的routes.php文件中只有2個路徑。這裏是我的routes.php文件文件的非註釋的部分:CodeIgniter路由不起作用

$route['404_override'] = ''; 

$route['default_controller'] = 'pages/view'; 
$route['(:any)'] = 'pages/view/$1'; 

我控制器位於/application/controllers/pages.php。

我不認爲它的.htaccess問題(因爲它可以得到的默認控制器),但這裏是我的.htaccess文件:

RewriteEngine On 
RewriteCond $1 !^(index\.php|styles|scripts|images|robots\.txt) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?$1 

#<IfModule mod_gzip.c> 
# mod_gzip_on  Yes 
# mod_gzip_dechunk Yes 
# mod_gzip_item_include file  \.(html?|txt|css|js|php|pl)$ 
# mod_gzip_item_include handler ^cgi-script$ 
# mod_gzip_item_include mime  ^text/.* 
# mod_gzip_item_include mime  ^application/x-javascript.* 
# mod_gzip_item_exclude mime  ^image/.* 
# mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* 
#</IfModule> 

編輯

這裏是頁面控制器:

<?php 

     class Pages extends CI_Controller { 

     public function __construct() 
     {  
       //Construct it's parent 
      parent::__construct(); 

      //Check login 
      //$this->load->model('pages_model'); 
     //$this->pages_model->getLoginStatus(); 

    } 


    public function view($page = 'dashboard') 
    { 

     //If the file doesn't exist 
     if (! file_exists('/var/www/vhosts/mysite/httpdocs/library/application/views/pages/'.$page.'.php')) 
     { 
      // Whoops, we don't have a page for that! 
      show_404(); 
     }  

     $data['title'] = ucfirst($page); // Capitalize the first letter 

     //Load all necessary views 
     $this->load->view('templates/head', $data); 
     $this->load->view('templates/header', $data); 
     $this->load->view('pages/'.$page, $data); 
     $this->load->view('templates/footer', $data); 

    } 

} 

?> 
+0

愚蠢的問題,但方法'視圖'確實存在的頁面控制器? – Rooneyl

+0

是的,它是頁面類中唯一的方法。我將在上面的代碼中添加該類。 –

+0

是否因爲您已將您的默認控制器聲明爲控制器/方法,而不僅僅是控制器?你應該在頁面控制器中有一個index()方法,當控制器被調用時不會有額外的段。 – Rooneyl

回答

2

這是我用所有項目我htaccess文件:

Options -Indexes 
Options +FollowSymLinks 

# Set the default file for indexes 
DirectoryIndex index.php 

<IfModule mod_rewrite.c> 

    # activate URL rewriting 
    RewriteEngine on 


    # do not rewrite links to the documentation, assets and public files 
    RewriteCond $1 !^(images|assets|uploads|captcha) 

    # do not rewrite for php files in the document root, robots.txt or the maintenance page 
    RewriteCond $1 !^([^\..]+\.php|robots\.txt|maintenance\.html) 

    # but rewrite everything else 
    RewriteRule ^(.*)$ index.php/$1 [L] 
</IfModule> 

<IfModule !mod_rewrite.c> 

    # If we don't have mod_rewrite installed, all 404's 
    # can be sent to index.php, and everything works as normal. 

    ErrorDocument 404 index.php 

</IfModule> 

然後確保你的config.php文件:

$config['index_page'] = ''; 
+0

謝謝@Laurencei,但我們現在知道服務器不允許重定向,但是我會在解決這個問題時使用它!謝謝 :) –

4

有你同樣的問題,就在剛纔,簡單的.htaccess文件移動到你的工作目錄的根目錄
只是把它應用程序文件夾