2013-05-28 80 views
0

我在探索CodeIgniter框架的門檻,我在這裏面臨一個非常基本的問題。我有一個名爲pages的控制器,它有一個名爲view的函數。CodeIgniter的URL - 404錯誤

問題1: 現在,當我鍵入example.com/myfolder/我確實登陸到我的頁面。但是當我嘗試諸如example.com/myfolder/index.php/pages/view或example.com/myfolder/pages/view之類的東西時,它會給我一個404錯誤。

問題2: 我需要從URL中刪除index.php。請糾正下面粘貼的.htaccess。

控制器

class Pages extends CI_Controller { 

    public function index() { 
     $this->view("home"); 
    } 

    public function view($page = 'home') { 
     if (!file_exists('application/views/pages/' . $page . '.php')) { 
      // Whoops, we don't have a page for that! 
      show_404(); 
     } 
     $data['title'] = ucfirst($page); // Capitalize the first letter 
     $data['company_name'] = "Demo Company 2013"; 
     $this->load->view('templates/header', $data); 
     $this->load->view('pages/' . $page, $data); 
     $this->load->view('templates/footer', $data); 
    } 

} 

路線

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

的.htaccess

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /myfolder/ 
RewriteCond %{REQUEST_URI} ^system.* 
RewriteRule ^(.*)$ /index.php?/$1 [L] 
RewriteCond %{REQUEST_URI} ^application.* 
    RewriteRule ^(.*)$ /index.php?/$1 [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?/$1 [L] 
</IfModule> 

<IfModule !mod_rewrite.c> 
    ErrorDocument 404 /index.php 
</IfModule> 

配置

$config['index_page'] = ''; 
$config['base_url'] = 'http://example.com/myfolder/'; 

更新

這可能是很重要的。我在一個共享的Windows主機上運行我的網站,這是使用IIS。所以我想我的.htaccess需要轉換爲web.config

UPDATE WEBCONFIG ADDED

現在,我已經加在一個問題的答案提供的鏈接中的web.config。非常感謝;這真的很有幫助,但我仍然得到舊的404錯誤。我試圖改變我的如下配置文件

$config['uri_protocol'] = 'QUERY_STRING'; 

但現在我得到的錯誤有關

<!doctyle HTML> 

我該如何解決這個問題?

回答

2

你可以寫你.htacces這樣

Options -Indexes 

Options +FollowSymLinks 

DirectoryIndex index.php 

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !index.php 
    RewriteRule (.*)\.php$ index.php/$1 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php/$1 [QSA,L] 

</IfModule> 

並檢查您的config.php文件,做這樣的變化。

$config['base_url'] = ''; 

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

感謝您的回覆Jerin。但它沒有按預期工作。這兩個URL的提到我仍然得到404。 –

+0

您可以刪除路由設置並手動嘗試網址嗎? $ route ['default_controller'] ='網頁'; $ route ['404_override'] =''; 像這樣 –

+0

除了route.php文件以外,沒有什麼需要關注的東西。 htaccess完全適合我。 –

0

這是我通常使用的作品在許多服務器的:

DirectoryIndex index.php 

<IfModule mod_rewrite.c> 

    RewriteEngine on 
    RewriteBase /myfolder 
    RewriteCond $1 !^(index\.php|user_guide|robots\.txt) 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?/$1 [L,QSA] 

</IfModule> 

<IfModule !mod_rewrite.c> 
    ErrorDocument 404 index.php 
</IfModule> 

根據您的服務器配置,您可能需要刪除index.php?後,

變化:

RewriteRule ^(.*)$ index.php?/$1 [L,QSA]

要:

RewriteRule ^(.*)$ index.php/$1 [L,QSA]

否則你可能會得到一個錯誤404 No input specified

+0

請檢查更新。 –

+0

對不起,我從來沒有在IIS上運行Codeigniter,這出現在一個快速搜索:http://stackoverflow.com/questions/12808063/remove-index-php-of-codeigniter-on-iis – Dan

0

我猜這條線服務於404:

if (!file_exists('application/views/pages/' . $page . '.php')) { 

嘗試用替換它:

if (!file_exists(APPPATH.'views/pages/' . $page . '.php')) {