Problème redirection si c'est une mauvaise ur

Utilisateur anonyme -  
okuni Messages postés 1325 Statut Membre -
Salut tous les monde !
Je m'adresse à vous car j'ai un petit soucis ! Avec mon code php et l'url rewriting !
Alors voilà : J'ai fais des url comme ça : news-le-titre-de-la-news-1.html mais si je tape news-le-tietr-de-la-news-1.html C'est pareil alors j'ai trouvé un code que j'ai adapter a mon site :

<?php
$id_news = $_GET['id_news'];
$news = mysql_query("SELECT * FROM CMS_news WHERE id = '".$id_news."'")or die(mysql_error());
$news1 = mysql_fetch_assoc($news);
if($news1["url"]!=$_GET["url"]){
		header("location: ./news-".$news1["url"]."-".$news1["id"].".html");
} 
?>


Mais ça ne redirige pas si c'est pas la bonne url o_O

J'implore votre aide.
Cordialement,
Alexandre

9 réponses

Résumé de la discussion

Un souci lié à PHP et à l’URL rewriting produit une redirection inexacte lorsque l’URL saisie diffère légèrement du slug prévu et empêche d’atteindre la version canonique attendue. Le mécanisme récupère l’identifiant via GET, interroge la base pour obtenir l’URL associée, compare cette valeur à celle fournie et, en cas d’écart, tente d’envoyer une redirection vers la page canonique. Des réponses suggèrent d’ajouter des affichages de débogage pour vérifier les valeurs des variables, de sécuriser l’entrée en convertissant l’id en entier et de tester si le header(Location) est réellement déclenché. En cas d’échec, l’analyse propose d’éclaircir le comportement avec des sorties conditionnelles et d’examiner les éventuels aléas comme le chemin relatif, l’existence des guillemets et les espaces autour des paramètres.

Bobot (l'IA à votre service)
  1. okuni Messages postés 1325 Statut Membre 126
     
    fait des echo pour voir les valeurs des 2 varaibles.

    une question, comment fait tu pour différencier news, le-titre-de-la-news et 1 ?
    puisque c'est le - qui sépare tout. Tu utilise quoi comme regex ?
    0
    1. Utilisateur anonyme
       
      Ou la !
      Tu me pose une colle !
      Que veux tu que je fasse avec les echo ?

      a+ merci d'avance ;)
      0
    2. okuni Messages postés 1325 Statut Membre 126
       
      Par exemple comme ceci :
      <?php
      $id_news = $_GET['id_news'];
      $news = mysql_query("SELECT * FROM CMS_news WHERE id = '".$id_news."'")or die(mysql_error());
      $news1 = mysql_fetch_assoc($news);

      echo '$news1["url"] : '.$news1["url"].'<br/>';
      echo '$_GET["url"] : '.$_GET["url"].'<br/>';
      if($news1["url"]!=$_GET["url"]){
      header("location: ./news-".$news1["url"]."-".$news1["id"].".html");
      }
      ?>
      tu verras tous de suite quels sont les valeurs de tes variables.
      0
    3. Utilisateur anonyme
       
      Merci je test !
      0
    4. Utilisateur anonyme
       
      Non ça ne marche toujours pas :'(
      0
    5. okuni Messages postés 1325 Statut Membre 126
       
      qu'est ce que retourne les variables ?
      donne moi ce que donne les echo.
      0
  2. okuni Messages postés 1325 Statut Membre 126
     
    Si tu ne réponds pas à mes questions, j'aurai encore plus dur à t'aider ;)

    quand tu dis "Sinon rien" à ton message précédent, ça veux dire quoi ?

    Je suppose que si je tape cette adresse dans la barre d'adresse cela fonctionne ?
    news-microsoft-rend-office-gratuit-sur-internet -1.html

    le ./ devant ton adresse dans le Location, c'est indispensable ?
    0
    1. Utilisateur anonyme
       
      Quand je dis sinon rien c'est que sinon rien ne s'affiche .

      Si tu tape ça non car après internet t'as un espace donc c'est not found Si tu enlève l'espace et que tu recolle le -1 oui ça marche.

      Et pour finir le ./ n'est pas indispensable mais j'ai essayer tous les petit truc possibles ! lol
      0
    2. Utilisateur anonyme
       
      Petite rectification !

      Ça n'affiche pas la news sur office car c'est l'id de la news sur l'ipad ! ;)
      0
    3. okuni Messages postés 1325 Statut Membre 126
       
      Donc, il y a un moment où tes echo n'affiche rien ?
      Il est là le problème.
      0
    4. Utilisateur anonyme
       
      Ah ! si j'avais pas vue ! Ils affichent ça :

      $news1["url"] : microsoft-rend-office-gratuit-sur-internet
      $_GET["url"] : microsoft-rend-office-gratuit-sur-internet


      Donc pas de problème ?
      Je comprends pas que ça marche pas !
      0
  3. okuni Messages postés 1325 Statut Membre 126
     
    effectivement c'est bizarre.
    essaye ceci :
    if($news1["url"]!=$_GET["url"]){
    echo 'Redirection';
    }
    else{
    echo 'Pas de redirection';
    }

    si les url sont différents, il affichera Redirection. Si c'est le cas, c'est ton header Location qui déconne. sinon, il y a un soucis ^^"
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Utilisateur anonyme
     
    C'est bon ça marche !
    0
    1. Utilisateur anonyme
       
      Si c'est pas bon ça affiche redirection
      0
    2. okuni Messages postés 1325 Statut Membre 126
       
      donc c'est ton header qui est foireux. bizarre car alors il devrait mettre une erreur.
      essaye ceci :
      header('location:news-'.$news1['url'].'-'.$news1['id'].'.html');
      0
  6. Utilisateur anonyme
     
    Il y a bien une redirection mais l'adresse ne change pas !

    Je m'explique : Je vais sur le page (bonne url ) j'enlève une lettre je charge la page puis elle se recharge mais ne change pas la lettre manquante :'(

    On y est presque !
    mdr
    0
  7. Utilisateur anonyme
     
    Dejà regarder c'est avec ça que j'ai trouvé le bout de code !

    Mais ce bout de code na marche pas ! :/

    Merci quand même ;)
    0
    1. LelLex Messages postés 1753 Statut Membre 112
       
      Si c'est le méthode de l'URL-Rewriting qui ne marche pas, c'est parce qu'il faut peut être l'activer. Même si généralement c'est activer.

      Pour moi, ça marche !
      0
    2. Utilisateur anonyme
       
      L'url rewrting marche très bien chez moi ;) mais pas ça :S
      0
    3. okuni Messages postés 1325 Statut Membre 126
       
      tu as essayé ceci :
      header('location:news-'.$news1['url'].'-'.$news1['id'].'.html');

      ça ne fonctionne toujours pas ?

      J'avoue que je ne comprend pas. Il devrait au moins y avoir une erreur s'il n'y a pas de redirection.
      0
    4. Utilisateur anonyme
       
      Oui j'ai déjà essayer ! :/
      0
  8. LelLex Messages postés 1753 Statut Membre 112
     
    La concaténation marche si c'est entre <?php // ici ?> !?
    0
    1. okuni Messages postés 1325 Statut Membre 126
       
      Je ne comprend pas ce que tu veux dire. pourquoi utiliser la concaténation dans un commentaire ?
      0
    2. LelLex Messages postés 1753 Statut Membre 112
       
      Je parle de ça :
       'location:news-'.$news1['url'].'-'.$news1['id'].'.html'
      0
    3. okuni Messages postés 1325 Statut Membre 126
       
      c'est comme ça que je fais sur mon site, j'ai simplement changé les variables donc oui ça fonctionne.
      0