J'ai suivi un tuto pour faire de l'url rewriting et même si c'est compréhensible, je ne comprends pas de quelle façon faire pour mettre le nom d'un champs de ma base de données + l'id dans l'url de type : https://www.monsite.com/id-champs-de-ma-bdd
Tu stockes ton slug en base via une colonne supplémentaire et tu fais une réécriture du motif correspondant à ceux-ci vers un script et qui cherche (clause WHERE du SELECT) la ressource à partir de ce slug (que tu extrais en PHP en parsant $_SERVER['REQUEST_URI'] ou via Apache et repasse en query string directement à PHP)
Ou alors si tu as l'id de la ressource directement dans l'URL, le reste n'est que "décoratif" et tu n'ajoutes rien à ta bdd mais, quand tu génères un lien vers ta ressource, il ne faut plus se contenter de passer l'id en query string, il faut générer la bonne URL (ton slug) et toujours avoir une règle de réécriture pour "traduire" par exemple les /articles/id-titre en article.php?id=id (pour RewriteRule ^article/(\d+)-.+ article.php?id=$1 [L]). En bonus, si le slug ne correspond pas (le restant de l'URL : RewriteRule ^article/(\d+)-(.+) article.php?id=$1&slug=$2 [L], $_GET['slug'] sur cet exemple) tu fais une redirection permanente (il suffit de comparer $_GET['slug'] au slug que tu regénères/recalcules à partir de ta ressource)
Maintenant plusieurs questions me viennent en tête :
1)Comment faire pour que si quelqu'un tape l'url initiale, il soit immédiatement redirigé vers la bonne url (et que donc l'url soit modifiée dans el navigateur)?
2)Ma page d'index se trouve dans le dossier controllers/HomepageController.php. Comment indiquer au serveur de rediriger localhost/monsite/ vers localhost/monsite/controllers/HomepageController.php sans que cette url soit notée?
.* devrait plutôt être .+, à moins vraiment de vouloir autoriser un "slug" vide ?
1) Apache ne peut pas faire la réécriture de ces URL puisqu'il n'a pas moyen de connaître le slug (ou alors il faut utiliser RewriteMap qui est lourd et dont la mise en place est contraignante) : le plus simple c'est simplement de faire la redirection HTTP permanente en PHP depuis CountryController.php lui-même en fonction de si tu as le slug ou non (suffit de tester ton paramètre $_GET['slug'])
2) via une règle de réécriture (RewriteRule ^$ controllers/HomepageController.php [L])
3) idem, via une (ou des) règle(s) de réécriture (à placer avant les autres de préférence)
Url_rewriting à partir d'une base de données mysql
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli