[RESOLU] url rewritting

Avatar du membre
Mammouth du PHP | 1609 Messages

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 -->
Développeur web depuis + de 20 ans

Eléphant du PHP | 100 Messages

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

Avatar du membre
Mammouth du PHP | 1609 Messages

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 ?
Développeur web depuis + de 20 ans

Eléphant du PHP | 100 Messages

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

Eléphant du PHP | 100 Messages

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