2016-05-31 5 views
0

Ich hatte einige Probleme mit CodeIgniter-Routing: ich eine Website für die einige Produkte bauen, und müssen eine URL folgen die Regel bauen:Codeigniter 3.0: Wie kann ich diese Routen definieren?

http://localhost/testsite/category-name/product-name/id.html oder http://localhost/testsite/pro-id/category-name/sub-category-name1/.../product-name.html, mit „Kategorie-name“, "sub -category-name1 "," sub-category-name2 "...," product-name "und" id "wurden dynamisch aus der Datenbank geladen.

Wie kann ich den Routenwert für diesen konfigurieren? Ich habe mit einigen Fällen versucht, aber es funktioniert nicht:

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

Vielen Dank für jede hilft!

Dank @Bira für Ihre Unterstützung, aber das Problem dort :) immer noch ist

Hier ist der Inhalt meiner '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'; 

Und der Inhalt der .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 

Und ... nur eine URL funktioniert "http://localhost/testsite/home.html" (die erste Regel). Andere Regeln zurückkehren Fehler: 404 Seite nicht gefunden (Ex: „http://localhost/testsite/pro-3/category-name/product-name.html“)

Hier ist mein Test-Controller-Klasse:

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); 
    } 
} 

Vielen Dank so viel für alle Träger, ich bin nur ein Neuling auf CI :)

+0

Vielen Dank, @Sparky, meine Frage deutlicher für die Herstellung :) – huynhtuanh

Antwort

1

Stellen Sie sicher, dass Apache .htaccess aktiviert ist. Stellen Sie sicher, dass das Apache-Modul mod_rewrite aktiviert ist.

+0

Vielen Dank für Ihre Antwort! Ich bin sicher, dass die .htaccess aktiviert ist und im Stammordner suchen, mod_rewrite ist auch aktiviert. Ich laufe immer noch meine alte Website mit umgeschriebener URL, möchte nur den alten Quellcode mit CI-Framework aktualisieren, aber ich hatte am Anfang ein Problem, so traurig :(. – huynhtuanh

+0

mach dir keine Sorgen für den nächsten Schritt .. http : //localhost/testsite/category-name/product-name/id.html $ route ['(: any) /: any]/(: anzahl) .html'] = 'product/detail? pid = $ 1' ; pflegen Sie die Anzahl der Schrägstriche zwischen den URLs – Bira

1

Entfernen Sie pid=$1 aus Ihren Routenregeln. Es wird klappen. Siehe untenstehenden Code.

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

Danke für Ihre Hilfe. Ja, es hat funktioniert, aber ich weiß nicht, wie ich den "Pid" -Wert bekommen soll. Ich brauche diese 'ID' für Abfragedaten aus db :) – huynhtuanh

+0

Verwenden Sie $ this-> input-> get ('pid'); 'und pass pid in Querystring – Vinie

+0

:), yeah ... es funktionierte für" http: //localhost/testsite/pro-1/sdasd/sdasdasd/sdasdasd.html?pid=3 "aber nicht für" http: //localhost/testsite/pro-3/sdasd/sdasdasd/sdasdasd.html ". Wie auch immer, ich habe einige Ideen für dieses Problem von Ihrer Unterstützung, vielen Dank. – huynhtuanh