2012-12-20 109 views
0

我正在使用CodeIgniter,需要擺脫URL中的「index.php」。 我複製了codeigniter教程中的.htaccess文件,清空了$ config ['index_page'] =''; 並將.htaccess放在根目錄下。 沒有.htaccess文件,它工作正常,但醜陋:www.example.com/index.php/site/home 由於某種原因,它不工作,只是拋出500的錯誤。.htaccess引發500錯誤

該錯誤在哪裏,我該如何解決它?

預先感謝您

我的.htaccess文件:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

    #Removes access to the system folders by users. 
    #Additionly this will allow you to create a System.php controller, 
    #previously this would not have not been possible. 
    #'system' can be replaced if you have renamed your system folder. 
    RewriteCond %{REQUEST_URI} ^system.* 
    RewriteRule ^{.*)$ /index.php?/$1 [L] 

    #When your application folder isn't in the system folder 
    #This snippet prevents user access to the application folder 
    #Submitted by: Fabdrol 
    #Rename 'application' to your applications folder name. 
    RewriteCond %{REQUEST_URI} ^application.* 
    RewriteRule ^(.*)$ /index.php/$1 [L] 

    #Checks to see if the user is attempting to access a valid file, 
    #such as an image or css document, if this isn't true it sends the 
    #request to index.php 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    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. 
    # submitted by: ElliotHaughin 
    ErrorDocument 404 /index.php 
</IfModule> 

我的現場控制器:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Site extends CI_Controller { 
    public function index(){ 
     $this->home(); 
    } 
    public function home(){ 
     echo "default function started.<br/>"; 
     $this->hello(); 
     $data['title'] = 'Home!'; 
     $data['name'] = 'Ilia'; 
     $data['fname'] = 'Lev'; 
     $data['operation'] = 'minus'; 
     $data['val1'] = 5; 
     $data['val2'] = 7; 
     echo $data['operation']."<br/>"; 
     $data['result'] = $this->math($data); 
     $this->viewLoad("home_view", $data); 
     echo "<br/>"; 
    } 
    public function hello(){ 
     echo "hello function started.<br/>"; 
    } 
    public function math($data){ 
     $operation = $data['operation']; 
     $val1 = $data['val1']; 
     $val2 = $data['val2']; 
     $this->load->model("math"); 
     return $this->math->calculate($operation, $val1, $val2)."<br/>"; 
    } 
    public function viewLoad($whatToView, $data){ 
     try{ 
      $this->load->view($whatToView, $data); 
     }catch(Exception $e){ 
      echo "There is no such view"; 
     } 
    } 
    public function about(){ 
     $data['title'] = "About!"; 
     $this->viewLoad("about_view",$data); 
    } 
} 
+2

您是否安裝了'mod_rewrite',並且在包含'htaccess'文件後是否重新啓動了apache?你的CodeIgniter也安裝在名爲'knight-guard.org'的子目錄中嗎? – PhearOfRayne

+0

沒有重新啓動Apache,我不知道mod_rewrite,因爲我無法訪問安裝在服務器上的模塊,或者不知道在哪裏可以找到它。 –

+0

剛剛重新啓動apache - 仍然是同樣的問題 –

回答

3

如果這是真的.htaccess文件的一部分,它會導致您的問題:

RewriteRule ^{.*)$ /index.php?/$1 [L] 
      ^^^ typo? 

應該是:

RewriteRule ^(.*)$ /index.php?/$1 [L] 
+0

嗯......'^^^錯字?'在哪裏?在上面的代碼?或者我只是沒有真正理解你... –

+1

@伊利亞列夫'(''而不是'{'。 – jeroen

+1

@llialev'在你的線路10'周圍。htaccess你有一個花括號'{',這應該是一個括號'(' – PhearOfRayne

1

我也有同樣的問題,但我的代碼是正確的,我用了WAMP的服務器,然後 我發現重寫模塊未啓用

所以去的apache/conf目錄/的httpd.conf和未註釋的線

的LoadModule rewrite_module模塊/ mod_rewrite.so

現在工作正常。