Page 1 sur 1

Url rewriting, en fonction des infos de la base de données

Posté : 25 sept. 2016, 10:21
par finipe
Bonjour à tous,

Je me penche actuellement sur l'url rewriting, mais j'ai beau lire des tas de trucs, des tutos, etc., je ne trouve pas mon bonheur (ni ne comprend tout, l'un n'excluant d'ailleurs pas l'autre...)

Bref, ce que j'aimerais, c'est un truc comme par exemple sur le site www.lemonde.fr : transformer une url de type "page.php?id=XXX" en quelque chose du genre "les-infos-de-la-base-correspondant-a-l-id-de-l-url.html"

Je voudrais faire ça sans faire une règle htaccess pour chaque url, évidemment, mais je n'ai trouvé nulle part comment récupérer les infos de la base dans le fichier htacess pour faire ses règles de réécriture.

Et enfin, j'ai lu plusieurs fois qu'il fallait ensuite modifier à la main chaque url du site : mais c'est particulièrement contre-productif, puisque si je fais ça, je dois contourner plein de trucs du code php (toutes les boucles utilisées pour afficher des articles, des catégories, etc.).

Y a-t-il un pro de l'url rewriting qui hante ces lieux ?

Merci pour votre aide :)

Re: Url rewriting, en fonction des infos de la base de données

Posté : 25 sept. 2016, 12:32
par @rthur
En fait le principe c'est de faire une règle de redirection générique dans ton .htaccess de type :
tout ce qui match "/(.+)\.html" (en gros n'importe quelle url qui termine par .html) et de le redéiriger vers page.php?titre=$1 où $1 correspondra au nom normalisé de ta page (le titre sans caractères spéciaux)
Et ensuite c'est ton fichier page.php qui va chercher dans la base de données à quel page ça correspond, exactement de la même façon que tu le fait déjà sur l'ID.

Important : je te préconise d'enregistrer le titre "normalisé"d e ta page dans ta bdd comme une métadonnées de l'article (comme l'ID en gros) afin : 1) de vérifier qu'il n'y ait pas de doublon dans tes url 2) de gagner en rapidité pour faire la correspondance quand tu chercheras en base de données à quoi correspond un titre normalisé.

Re: Url rewriting, en fonction des infos de la base de données

Posté : 25 sept. 2016, 13:56
par or 1
la fin d'une url du site du monde :
du-trafic-parisien_5002550_4497271.html
donc il y a bien l'id dans l'url. on peut ne pas le mettre mais il faut s'assurer qu'il n'y aura pas de doublon dans le texte choisi pour definir une page.

et ensuite, il faut bien modifier son code php pour changer tous les liens pour pointer vers les nouvelles urls.

Re: Url rewriting, en fonction des infos de la base de données

Posté : 26 sept. 2016, 00:14
par finipe
Merci pour vos réponses, je vais m'y atteler sérieusement.
Question subsidiaire : comment faire pour tester l'url rewriting en local ? (je bosse avec easyPhp, et windows refuse de renommer un fichier en ".htaccess")

Re: Url rewriting, en fonction des infos de la base de données

Posté : 26 sept. 2016, 01:23
par @rthur
Utilises un éditeur de code qui permet de nommer un fichier .htaccess
Par exemple, ça ne pose pas de problème pour Sublime Text ou Scite.

Re: Url rewriting, en fonction des infos de la base de données

Posté : 26 sept. 2016, 13:13
par finipe
Super, ça marche, merci @rthur :)

Re: Url rewriting, en fonction des infos de la base de données

Posté : 26 sept. 2016, 15:10
par finipe
Bon eh bien ça fonctionne, mais ça oblige à compliquer le code pour générer des url qui correspondent. Pas fastoche de penser à tout !

Une ultime question que je n'arrive pas à résoudre : comment faire fonctionner l'url rewriting en local ? J'ai pourtant vérifié dans httpd.conf, et la ligne du module url_rewriting est bien décommentée...

Re: [RESOLU] Url rewriting, en fonction des infos de la base de données

Posté : 26 sept. 2016, 15:58
par finipe
Et les commandes à base de basename fonctionneront-elles toujours correctement ?

Re: Url rewriting, en fonction des infos de la base de données

Posté : 26 sept. 2016, 18:41
par Ryle
Bonjour,

Pour nommer un fichier .htaccess, vous pouvez également :
- ouvrir votre fichier texte avec le bloc note, faire "enregistrer sous" et saisir le nom du fichier : ".htaccess" (avec les guillemets).
- il semblerait qu'avec windows 7, il soit aussi possible de juste ajouter un point à la fin du nom .htacess. pour que cela fonctionne.

Pour basename() il te retournera toujours le dernier élément du chemin qui lui est passé en argument. Si la valeur de l'url ou du chemin spécifié n'est plus la même, le retour sera également différent... tout dépend alors à quoi et comment tu utilises cette fonction.

Et pour le htacess en local, il faut que l'attribut "AllowOverride" du dossier dans lequel se trouve ton site (ou un sous dossier) soit à "All" afin d'autoriser ces fichiers à surcharger la configuration du serveur :)

Re: Url rewriting, en fonction des infos de la base de données

Posté : 26 sept. 2016, 22:59
par finipe
Merci pour ta réponse Ryle, mais j'arrive toujours pas à faire fonctionner le htaccess en local.

"AllowOverride All", je l'ai trouvé dans le fichier data\conf\apache_alias.conf, et il est bien configuré sur All (mais est-ce le bon fichier ?).
En fait, autant je commence à me débrouiller en php et être moins ignorant, autant je mesure l'étendue de ma nullité sur tout ce qui concerne les serveurs, configurations, et tout ce qui fait tourner le php en fond :roll:

Quant à la commande basename, je ne peux plus l'utiliser de façon sûre si je comprends bien : si je fais des conditions comme ceci par exemple :
// La condition porte sur le fichier "de base", celui qui n'a pas été modifié pour l'url rewriting
if(basename(.....) == "page.php")
{

}
...dans ce cas, la condition ne marchera plus ?


Bref, tout ça pour dire qu'en fait, c'est pas vraiment de l'url rewriting tout ça non ? Moi je pensais que qu'on pouvait réécrire à la volée des urls pour leur donner une forme plus explicite. Ce qui m'embête beaucoup, c'est le fait de devoir revoir tout le code pour changer toutes les url, c'est un boulot de dingue ! :afraid: