2016-05-31 1 views
0

私はCodeIgniterのルーティングといくつかのトラブルがあった: 私はいくつかの製品を示すためにサイトを構築し、URLがルールに従わ構築する必要がありますしたい:「カテゴリ名」、「サブとCodeigniter 3.0:どのようにこれらのルートを定義できますか?

http://localhost/testsite/category-name/product-name/id.htmlまたはhttp://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 

... 1つの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'] = '製品/詳細?pid = $ 1' ; URLの間にスラッシュの数を維持 – Bira

1

ルートルールからpid=$1を削除します。それが動作します。下記のコードを参照してください。

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

おかげさしだ。はい、それは機能しましたが、私は 'pid'値を取得する方法がわかりません。 – 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

関連する問題