Codeigniter 3.0: как я могу определить эти маршруты?

У меня были некоторые проблемы с маршрутизацией CodeIgniter: я хочу создать сайт для демонстрации некоторых продуктов, и мне нужно создать URL-адрес, следуя правилу:

http://localhost/testsite/category-name/product-name/id.html или http://localhost/testsite/pro-id/category-name/sub-category-name1/.../product-name.html с "имя-категории", "имя-подкатегории1", "имя-подкатегории2"..., "название-продукта" и "id" загружались динамически из базы данных.

Как я могу настроить значение маршрута для этого? Я пробовал с некоторыми случаями, но это не работает:

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

Большое спасибо за любую помощь!

Спасибо @Bira за поддержку, но проблема осталась :)

Вот содержимое моего файла route.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 :)


person huynhtuanh    schedule 31.05.2016    source источник
comment
Спасибо, @Sparky, за более ясный вопрос :)   -  person huynhtuanh    schedule 01.06.2016


Ответы (2)


Убедитесь, что Apache .htaccess включен. Убедитесь, что модуль Apache mod_rewrite включен.

person Bira    schedule 31.05.2016
comment
Спасибо за ваш ответ! Я уверен, что .htaccess включен и находится в корневой папке, mod_rewrite тоже включен. Я все еще использую свой старый веб-сайт с переписанным URL-адресом, просто хочу обновить старый исходный код с помощью среды CI, но в начале у меня были проблемы, так что грустно :( . - person huynhtuanh; 01.06.2016
comment
не беспокойтесь о следующем шаге. name/id.html $route['(:any)/:any)/(:num).html'] = 'product/detail?pid=$1'; поддерживать количество косых черт между URL-адресами - person Bira; 01.06.2016

Удалите pid=$1 из правил маршрутизации. Это будет работать. См. код ниже.

$route['pro-(:num)/(:any).html'] = 'product/detail';
$route['(:any)/(:num)'] = 'product/detail';
person Vinie    schedule 01.06.2016
comment
Спасибо за вашу помощь. Да, это сработало, но я не знаю, как получить значение «pid». Мне нужен этот идентификатор для запроса данных из БД :) - person huynhtuanh; 02.06.2016
comment
используйте $this->input->get('pid'); и передайте pid в строке запроса - person Vinie; 02.06.2016
comment
:), да... это сработало для localhost/testsite/ pro-1/sdasd/sdasdasd/sdasdasd.html?pid=3, но не для localhost/testsite/pro-3/sdasd/sdasdasd/sdasdasd.html. Во всяком случае, у меня есть несколько идей по этой проблеме от вашей поддержки, большое вам спасибо. - person huynhtuanh; 02.06.2016