Здравствуйте уважаемые разработчики! Хочу сделать ЧПУ, но не могу понять как. Что-то до меня не доходит. Есть страницы site.ru/category/cosmos/index.php?id=1 хочу следующее: site.ru/category/cosmos/index.php?id=1 преобразовать в site.ru/category/cosmos/1 или site.ru/cosmos/1 site.ru/category/cosmos/index.php?id=2 преобразовать в site.ru/category/cosmos/2 или site.ru/cosmos/2 site.ru/category/cosmos/index.php?id=3 преобразовать в site.ru/category/cosmos/3 или site.ru/cosmos/3 site.ru/category/cosmos/index.php?id=4 преобразовать в site.ru/category/cosmos/4 или site.ru/cosmos/4 site.ru/category/cosmos/index.php?id=5 преобразовать в site.ru/category/cosmos/5 или site.ru/cosmos/5 И так далее... Буду очень благодарен за помощь. Спасибо.
Чпу предполагает единую точку входа. странно что она у вас лежит в категориях космоса. Создайте папку public. Туда запихните index.php, js, css, image и прочее. Создайте .htaccess и туда путь из корня сайта к index.php, например так: Код (Text): RewriteEngine on RewriteRule ^$ public/ [L] RewriteRule ^(.*) public/$1 [L] Создайте папку app, там фаил router.php и подключите его в index.php. И пишите там свои роуты cosmos/1 Если разберетесь с композером: PHP: $app->group('/cosmos', function (Group $group) { $group->get('', CosmosAction::class); $group->get('/{id}', IdCosmosAction::class); }); а если не разберетесь то придется такой велосипед делать) https://www.programulin.ru/chpu-routing-edinaya-tochka-vhoda-na-php
Не предполагает. Но сильно рекомендуется использовать единую точку входа, чтобы не городить костыли. И рерайт в public – это заглушка для тупых. Ты же не тупой. Нафиг это выкладывать? Лучше бы показал основной рерайт, т.е. непосредственно в единую точку входа, а не в ХЗ что. --- Добавлено --- @Zasadaa, что обозначают циферки? Подкатегории? Или материалы категорий?
@miketomlin, немного переделал есть вот это: site.ru/kosmos.php?id=1 преобразовать в site.ru/kosmos/1 хотя бы так. Цифры обозначают статью раздела. В данном случае kosmos - это раздел, а цифра 1 - это первая статья --- Добавлено --- Есть еще другие разделы и в каждом из них много статей. Мне бы чем проще тем лучше. Спасибо
Готовый фронт-контроллер с автовыборкой данных (MySQL): https://gency.ru/comment/127 Если нумерация статей общая для всех разделов (т.е. они хранятся в одной таблице), нужно создать представления БД для каждого раздела, чтобы можно было использовать автовыборку, например: Код (Text): CREATE ALGORITHM=MERGE VIEW `site_kosmos` AS SELECT * FROM `site_articles` WHERE `category`=1; Или написать выборку из таблицы статей по полю category вручную, например: PHP: if (strlen($p1)) { if (!($result=mysqli_query($link,"SELECT * FROM `site_articles` WHERE `category`={$page['category']} AND `id`='$p1'"))) { error(503); return; } $r1=mysqli_fetch_assoc($result); mysqli_free_result($result); if (!($r1)) { error(404); return; } $page=&$r1; } P.S. Вообще при использовании общей таблицы статей проще делать так: [/category]/kosmos и /articles/1, т.е. в адресах статей использовать обобщенный слаг и в адресах категорий, возможно, тоже. P.P.S. Если до сих пор не поняли, использовать по полной mod_rewrite для ЧПУ – это прошлый век. Вам нужен только один рерайт, в единую точку входа. Пример тут (вам выше уже давали ссылку на подобную статью).