[RESOLU] url rewritting

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] url rewritting

Re: url rewritting

par bernard25 » 05 mars 2020, 11:18

Bonjour Saian,

J'ai repensé mon approche, j'ai crée un champ url

et lors de l'affichage je prends url-id et dans le htaccess :

Code : Tout sélectionner

RewriteRule informations/([a-zA-Z0-9\-]+)-([0-9]+) informations/index.php?url=$1&dirmodif=$2
ce qui maintenant me donne l'url suivante :http://association/informations/cyber-centre-2

Un grand merci à toi
Bonne Journée

Re: url rewritting

par bernard25 » 04 mars 2020, 12:39

Saian,

Je te donnes le code du menu vertical :

Code : Tout sélectionner

if (isset($_GET["dirmodif"])) { $id = $_GET["dirmodif"]; echo"<div> <p class='espacemini'></p> <p>"; $reponse =$bdd->prepare('SELECT * FROM '.$informations_BDD.' ORDER BY id DESC LIMIT 0,5'); $reponse->bindParam(':modif', $modif, PDO::PARAM_INT); $reponse->bindParam(':racine', $racine, PDO::PARAM_STR); $reponse->bindParam(':presentation', $presentation, PDO::PARAM_STR); $reponse->execute(); $nb_enreg = $reponse->rowCount(); if($nb_enreg >0){ echo"<h1>Informations</h1>"; while ($ligne = $reponse->fetch()) { $url = $ligne['titre']."-".$ligne['id']; $menu=$ligne['titre']; //-------- Définition de la Date ------------------------- //echo "<li"; if ($_SERVER['REQUEST_URI'] == $racine.$actualite.$urltitre) {echo ' id="currentpage2"';} echo"><a href='".$url."'>".$ligne['menu'].' '.$dateactu."</a></li>"; //echo "<li"; if ($_SERVER['REQUEST_URI'] == $racine.$actualite.$url) {echo ' id="currentpage2"';} echo"><a href='".$url."'>".$ligne['menu']."</a></li>"; echo'<p><a href="index.php?dirmodif='.$ligne['id'].'" title="Menu" ><span class="texteactualitesgras">'.$menu.'<br/></a></p>'; } echo"</p> </div>"; $reponse->closeCursor(); } }
et le code d'affichage du résultat :

Code : Tout sélectionner

if(isset($_GET['dirmodif'])) { $idaffiche = $_GET['dirmodif']; $rep =$bdd->prepare('SELECT * FROM '.$informations_BDD.' WHERE id =:idaffiche'); $rep->bindParam(':idaffiche', $idaffiche, PDO::PARAM_INT); $rep->execute(); $donnees = $rep->fetch(); $current = $donnees['titre']; $repertoirephoto='../img/photos/'.$categoriemenu.'/'; echo '<h1>'.$donnees['titre'].'</h1>'; //<p class="adroite">'.$dateactu.'</p></h1>'; if($donnees['photo']!=''){ echo'<p><img src="'.$repertoirephoto.$donnees['photo'].'" alt="'.$donnees['titre'].'" title="'.$donnees['titre'].'" /></p>'; } echo "<div class='presentation'>".$donnees['presentation']."</div>"; $rep->closeCursor(); }
Si cela peut t'aider à résoudre mon problème
Encore Merci

Re: url rewritting

par Saian » 04 mars 2020, 12:15

Pourrait être une solution, seulement, mon menu de gauche est alimenté par des enregistrements donc en dynamique
La valeur dirmodif est unique à chaque enregistrement (id) pour les module actualités / informations les enregistrements auront une "durée de vie" relativement courte (Ajout / Suppression)
Je vois pas bien quel est le problème. Les liens du menu sont dynamiques et alors ?

Re: url rewritting

par bernard25 » 04 mars 2020, 11:00

Bonjour Saian,

Merci pour tes explications très claires

J'avoue que les règles du htaccess soont une nébuleuse pour moi

J'ai bien 2 dossiers distincts : Actualités et Informations avec chacun un fichier index.php

Ta proposition :

Code : Tout sélectionner

<a href="actualites-21.html">Actualité 21</a><!-- appelle actualites/index.php?dirmodif=21 -->
Pourrait être une solution, seulement, mon menu de gauche est alimenté par des enregistrements donc en dynamique
La valeur dirmodif est unique à chaque enregistrement (id) pour les module actualités / informations les enregistrements auront une "durée de vie" relativement courte (Ajout / Suppression)

Pour infos : je n'ai que cette règle dans mon htaccess

Encore merci pour ta patience

Re: url rewritting

par Saian » 03 mars 2020, 17:46

As tu plusieurs règles dans ton fichier htaccess ? l'adresse réelle fonctionne-t-elle ?

Si tu as plusieurs règles, théoriquement ça va prendre la dernière règle qui match à moins que tu es mis le bon flag à la fin.
Généralement on ajoute à la fin de la ligne le flag [L] pour que la réécriture s'arrête dès qu'elle a trouvé une règle qui match.
RewriteRule le-lien-(\d+).html informations/index.php?dirmodif=$1 [L]

Donc méfie toi, si tu fais ça :
RewriteRule le-lien-(\d+).html actualites/index.php?dirmodif=$1 [L]
RewriteRule le-lien-(\d+).html informations/index.php?dirmodif=$1 [L]

La réécriture de le-lien-21.html appellera toujours actualites/index.php=21 et sans les [L] ça appellera toujours informations/index.php=21.

Maintenant en vrai quelle est la structure de tes répertoires ?

Si tu as bien un dossier actualites et un dossier informations avec chacun son fichier index.php tu pourrais simplement faire :
// htaccess
RewriteRule actualites-(\d+).html actualites/index.php?dirmodif=$1 [L]
RewriteRule informations-(\d+).html informations/index.php?dirmodif=$1 [L]
// ou une règle unique
RewriteRule (\w+)-(\d+).html $1/index.php?dirmodif=$2 [L]

//html
<a href="actualites-21.html">Actualité 21</a><!-- appelle actualites/index.php?dirmodif=21 -->
<a href="actualites-22.html">Actualité 22</a><!-- appelle actualites/index.php?dirmodif=22 -->
<a href="informations-21.html">Information 21</a><!-- appelle informations/index.php?dirmodif=21 -->
<a href="informations-22.html">Information 22</a><!-- appelle informations/index.php?dirmodif=22 -->

Re: url rewritting

par bernard25 » 03 mars 2020, 17:44

Désolé,

J'ai un module actualités et un module informations qui fonctionnent sur le même principe, j'ai tester sur le module informations car j'ai + d'enregistrements

Merci

Re: url rewritting

par Saian » 03 mars 2020, 17:38

Tu as un dossier informations avec un fichier index.php dedans ?

Une rewrite rule c'est :
RewriteRule adresse_souhaitée adresse_réelle

Il faut utiliser l'adresse souhaitée sur tes liens et il faut bien entendu que l'adresse réelle existe.

Re: url rewritting

par bernard25 » 03 mars 2020, 17:37

Saian,

Merci beaucoup pour ta patience,

J'ai essayé ton code :

Code : Tout sélectionner

RewriteRule le-lien-(\d+).html informations/index.php?dirmodif=$1
et naturellement le href modifié, et j'ai une erreur Not Found

Encore merci,
Bonne soirée

Re: url rewritting

par Saian » 03 mars 2020, 17:24

A toi d'adapter la règle en fonction de ce que tu veux faire et rien ne t'empêche d'avoir plusieurs règles.
Avec une règle une chouille dynamique :
// dans le htaccess
RewriteRule le-lien-(\d+).html actualites/index.php?dirmodif=$1
// dans le html
<a href="le-lien-21.html">le lien 21</a><!-- appelle actualites/index.php?dirmodif=21 -->
<a href="le-lien-22.html">le lien 22</a><!-- appelle actualites/index.php?dirmodif=22 -->

Re: url rewritting

par bernard25 » 03 mars 2020, 17:20

Merci Saian,

Effectivement si je mets ton code, le lien affiche index.php et non index.php/?.....

Ton code fonctionne car RewriteRule actualites actualites/index.php?dirmodif=22 pointe vers l'enregistrement 22 mais cet id change (du 1 à xxxx) ici c'est l'enregistrement 22 mais il pourrait suivant le href être 21 ou 2541
Merci pour ton dérangement

Re: url rewritting

par Saian » 03 mars 2020, 16:55

J'ai l'impression que tu n'arrives toujours pas à comprendre. Le lien ne va pas se modifier tout seul, c'est à toi de le changer dans le html.
// dans le htaccess
RewriteRule le-lien.html actualites/index.php?dirmodif=22
// dans le html
<a href="le-lien.html">le lien</a>
Quand tu vas cliquer le-lien.html dans la barre d'adresse tu auras bien le-lien.html mais le serveur appellera actualites/index.php?dirmodif=22.

Re: url rewritting

par bernard25 » 03 mars 2020, 14:56

Merci Saian pour ta réponse,

En fait sur ma page à gauche j'ai un menu vertical qui m'affiche mes actualités et en cliquant sur un item du menu (Titre Actualité), l'enregistrement s'affiche sur la partie droite de ma page l'item récupère le numéro de l'id de manière à récupérer cet enregistrement.
Si je mets : a href="actualité"... je ne pourrai pas afficher mes autres enregistrements

Htaccess:
RewriteRule actualites/([a-zA-Z0-9\-]+)-([0-9]+) actualites/index.php?id=$1&dirmodif=$2
Mais j'ai toujours en visuel : http://association/actualites/index.php?dirmodif=22
Merci encore

Re: url rewritting

par Saian » 03 mars 2020, 12:57

Bonjour Bernard, en fait l'adresse ne va pas changer toute seule. C'est à toi de mettre l'url http://association/actualites/actualité sur le href du lien.
Je rajouterais et de bien écrire la règle pour que ça fonctionne.

<a href="actualité" title="Menu" ><span class="texteactualitesgras">'.$menu.'<br/></a>
En cliquant le lien, tu auras une 404 jusqu'à ce que la règle soit bien écrite et là, tu auras la bonne page.

Re: url rewritting

par bernard25 » 03 mars 2020, 12:44

Bonjour Saian,

Merci pour ta réponse claire,

http://association/actualites/index.php?dirmodif=22 vient d'un href
Voici le code qui est appelé

Code : Tout sélectionner

<a href="index.php?dirmodif='.$ligne['id'].'" title="Menu" ><span class="texteactualitesgras">'.$menu.'<br/></a>

J'ai essayé plusieurs RewriteRule dans mon fichier .htaccess mais je n'y arrive pas

Merci

Re: url rewritting

par Saian » 03 mars 2020, 12:06

Bonjour Bernard, en fait l'adresse ne va pas changer toute seule. C'est à toi de mettre l'url http://association/actualites/actualité sur le href du lien.
La réécriture d'URL va permettre au serveur de savoir que quand tu demandes http://association/actualites/actualité il doit en fait ouvrir http://association/actualites/index.php?dirmodif=22