Задать вопрос
@garik2021

Как в php реализовать чпу как в wordpress или opencart чтобы url брались из базы данных mysql?

Здравствуйте подскажите пожалуйста как сделать чпу на php чтобы названия брались из базы данных как например сделано в opencart или в wordpress

Сейчас у меня ссылки работают по get параметру id и выглядят вот так page.php?id=1 есть еще вот такая ссылка class.php?id=1 как сделать вот так

page?id=1 превратить в ссылку вот такого вида /razdel1/razdel2 а ссылку class.php?id=1 превратить в ссылку такого вида /razdel/

Перерыл уже весь яндекс толкового примера так и не нашел в основном все преобразования с ссылками проводятся в .htaccess но такой вариант мне не подходит мне нужно чтобы все ссылки брались из базы
и сравнивались между собой
Например

page.php?id=1 => razdel1/razdel2
page.php?id=2 => razde3/razdel4
class.php?id=1 => /test/
class.php?id=2 => /test2/
Как сделать так ? Напишите пожалуйста пример на php pdo Спасибо
  • Вопрос задан
  • 147 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 1
@hello_my_name_is_dany
Backend Developer (Node.js, PHP, C#)
Без проксирования или mod_rewrite никак этого не сделать. Запросы обрабатывает в первую очередь веб-сервер, и если ему не сказать, что все запросы должны проксироваться на index.php, он попытается открыть такой путь. А дальше уже после проксирования как раз на PHP берёте из HTTP-запроса URL ищите в базе или вручную прописываете, сравниваете и делайте, что надо, в зависимости от найденой страницы.
$db = new PDO($dsn, $user, $password);
$sth = $db->prepare('SELECT * FROM routes WHERE route = :route LIMIT 1');
$sth->execute([ ':route' => $_SERVER['REQUEST_URI'] ]);
$result = $sth->fetch(PDO::FETCH_ASSOC);

if (!$result) {
    echo "Not found!\n";
    die();
}

$routeId = $result['id'];

// ваша логика по обработке запроса или отображения страницы
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы