2016-05-31 23 views
0

我遇到了一些麻煩與CodeIgniter的路由: 我想建立一個網站,顯示出一些產品,需要建立一個URL遵循以下規則:Codeigniter 3.0:我如何定義這些路線?

http://localhost/testsite/category-name/product-name/id.htmlhttp://localhost/testsite/pro-id/category-name/sub-category-name1/.../product-name.html, 與「類別名稱」,「子-category-name1「,」sub-category-name2「...,」product-name「和」id「是從數據庫動態加載的。

如何配置此路線值? 我已經試過了一些案件,但它不工作:

$route['pro-(:num)/(:any).html'] = 'product/detail?pid=$1'; 
$route['(:any)/(:num)'] = 'product/detail?pid=$1'; 

非常感謝任何幫助!

感謝@Bira您的支持,但問題仍然存在:)

這裏是我的 'routes.php文件'

$route['default_controller'] = 'product'; 
$route['404_override'] = ''; 
$route['translate_uri_dashes'] = FALSE; 
$route['home.html'] = 'product/index'; 
$route['pro-(:num)/(.+).html'] = 'product/detail?pid=$1'; 
$route['(:any)/(:any)/(:num).html'] = 'product/detail?pid=$3'; 

的內容和的.htaccess的內容

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule ^home.html index.php/product/index 
RewriteRule ^pro-([0-9]+)/(.*).html index.php/product/detail?pid=$1 
RewriteRule ^([0-9A-Za-z]+)/([0-9A-Za-z]+)/([0-9]+).html index.php/product/detail?pid=$3 

而且......只有一個URL正在工作「http://localhost/testsite/home.html」(第一條規則)。其他規則將返回錯誤:404找不到網頁(例如:「http://localhost/testsite/pro-3/category-name/product-name.html」)

這裏是我的測試控制器類:

class Product extends CI_Controller { 
    public function index() 
    { 
     $this->load->view('products'); 
    } 
    public function detail() 
    { 
     $pid = $_GET['pid']; 
     $data['pid'] = $pid; 
     $this->load->view('product_detail', $data); 
    } 
} 

感謝你這麼多的任何支持,我只是一個新手CI :)

+0

謝謝你,@Sparky,讓我的問題更清楚:) – huynhtuanh

回答

1

確保已啓用Apache .htaccess。 確保Apache模塊mod_rewrite已啓用。

+0

感謝您的迴應!我確信.htaccess已啓用並位於根文件夾中,mod_rewrite也已啓用。我仍然在運行我的舊網站重寫URL,只是想用CI框架升級舊的源代碼,但我在開始時遇到了麻煩,所以很難過:(。 – huynhtuanh

+0

不用擔心下一步.. http ://localhost/testsite/category-name/product-name/id.html $ route ['(:any)/:any)/(:num).html'] ='product/detail?pid = $ 1' ; 維護網址之間的斜槓數量 – Bira

1

從您的路線規則中刪除pid=$1。它會工作。見下面的代碼。

$route['pro-(:num)/(:any).html'] = 'product/detail'; 
$route['(:any)/(:num)'] = 'product/detail'; 
+0

感謝您的幫助。是的,它有效,但我不知道如何獲得'pid'的價值。我需要這個'ID'查詢數據從數據庫:) – huynhtuanh

+0

使用'$ this-> input-> get('pid');'並在查詢字符串 – Vinie

+0

:)中傳遞PID,是的...它的工作原理是「http: //localhost/testsite/pro-1/sdasd/sdasdasd/sdasdasd.html?pid=3「,但不適用於」http://localhost/testsite/pro-3/sdasd/sdasdasd/sdasdasd.html「。無論如何,我對你的支持有這個問題的一些想法,非常感謝。 – huynhtuanh