2014-12-07 101 views
0

我在使用Codeigniter時遇到困難。我試圖通過將記錄ID作爲URL的一部分,以獲得從MySQL數據數據Codeigniter .htaccess數據庫重寫

的網址是要

本地主機/ site_folder /頁/ PAGE_TITLE/2

在上面的URL中,頁面是控制器的名稱,而是數據庫中記錄的主要ID(可以是1到9999之間的任何數字)。

我控制器包括這樣的:

public function index() 
{ 
    $this->load->helper('url'); 
    $this->load->model('pages_model'); 

    $id = $this->uri->segment(3,1); 
    if (empty($id)) 
    { 
     show_404(); 
    } 

    $data['page'] = $this->pages_model->get_page($id); 
    $this->load->view('page',$data); 
} 

我的.htaccess包含此

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php/$0 [PT,L] 

當我進入localhost/site_folder/page/page_title/2到地址欄,它拋出一個404
然而,當我進入localhost/site_folder/page它會顯示默認數據庫條目,如上面第二個值segment(3,1)所示。

那麼,我該如何改變.htaccess文件以進行可行的重寫呢?
我曾嘗試以下,但沒有爲我工作:。

  • 重寫規則*頁/ $ 0 [PT,L]
  • 重寫規則*頁/(*.)/$ 0 [PT,L]
  • 重寫規則。*頁面/(?*.)/$ [PT,L]
+0

另一個索引「參數」的問題,你需要明白,這個網址ufo.com/page/1希望控制器「頁面」和方法「1」,沒有重寫規則會幫助你看到這個[問題/回答](http://stackoverflow.com/a/27220596/1564365) – Kyslik 2014-12-07 16:50:56

+1

@Kyslik:謝謝。我將URL更改爲http:// localhost/ci/page/index/1,並且工作正常 – 2014-12-07 20:54:37

回答

0

您的CI文件https://ellislab.com/codeigniter/user-guide/general/controllers.html

的描述可以嘗試使用_remap功能函數如果存在於控制器中,則是在任何類方法之前調用的函數,並且在此函數中可以檢查發送給該函數的參數,並根據此調用控制器的任何方法。

對於你的例子,因爲我認爲page_title是動態的,你可以設置一個正則表達式來檢查它,或者在下面的例子中檢查該方法是否存在,然後把它作爲一個頁面標題(這意味着你必須一定不能有一個頁面標題和在該控制器具有相同名稱的方法名稱)

public function _remap($method, $params = array()) 
{ 
    if (!method_exists($this, $method)) 
    { 
     // assume this is a page_title and run the index method 

     $this->index($method, $params);  
    } 
    else { 
     // means that method exists then run that method 
     $this->$method($params); 
    } 

} 

還記得那就是說,你應該考慮在404頭的索引方法使用時,有人只需要輸入隨機字符串,控制器將視爲page_title。