IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

URL rewriting, une énigme!


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 58
    Par défaut URL rewriting, une énigme!
    Bonjour,

    J'essaye en vain d'utiliser l'url rewriting sur mon site web. J'aimerais réécrire les adresses simplement, si possible en insérant les mots clés de mes news dans l'adresse de la page "detail.php" sur la barre d'adresse (je ne sais pas comment faire ça). J'aimerais aussi ne pas avoir à modifier les liens dans mes fichiers php, si un fichier htaccess suffit c'est génial! Je suis hébergé par "bluehost".

    Mon acharnement vise à transformer les types d'adresses suivantes:

    index.php?page=2
    index.php?page=2&tri=asc
    index.php?page=2&tri=desc

    index.php?stat=comment
    index.php?page=2&stat=comment

    index.php?stat=like
    index.php?page=2&stat=like

    detail.php?news=22
    account.php?pseudo=Yopla

    Voici la tête de mon fichier .htaccess:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #--------------------------------------------------
    # Répertoire : /www/
    #--------------------------------------------------
     
    # Le serveur doit suivre les liens symboliques :
    3Options +FollowSymlinks
     
    # Activation du module de réécriture d'URL (!!!mettre à on):
    RewriteEngine off
     
    #--------------------------------------------------
    # Règles de réécriture d'URL :
    #--------------------------------------------------
     
    # Article sans numéro de page :
    #RewriteRule ^news-([0-9]+)\.html$   /detail.php?news=$1 [QSA,L]
     
    # Index avec numéro de page : index-2.html
    #RewriteRule ^index-(.*)\.html$ /index.php?page=$1 [QSA,L]
     
    # Index avec numéro de page et tri : index-2-asc.html
    #RewriteRule ^index-(.*)-(.*)\.html$ /index.php?page=$1&tri=$2 [QSA,L]
    Merci beaucoup pour votre aide, je suis nouveau dans le domaine et autodidacte

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    A part le fait qu'il faut décommenter (activer) les règles, je ne vois pas de problème. C'est quoi le souci ?

    Pour la modification des liens dans les pages, c'est dommage, va falloir que tu t'y mettes Apache ne le fera pas pour toi sauf à utiliser des redirections inavouables ou mod_proxy_html mais je doute que ce soit possible chez ton hébergeur et ce n'est pas beau non plus.

  3. #3
    Membre averti
    Inscrit en
    Février 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 58
    Par défaut
    Merci pour ta réponse. Je vais exposer mon problème par étapes.

    Le scénario est le suivant:

    J'ai une page index.php qui regroupe plusieurs news. En bas de la page, il y a des numéros de page pour voir les news plus anciennes. Toujours sur cette page d'index, on peut trier les news suivant le nombre de commentaires qu'elles ont reçues, ou bien le nombre de "like".

    A l'heure actuelle, quand je clique sur les liens de page en bas de "index.php", je tombe sur la deuxième page: index-2.html . Si je clique sur le lien "1", je tombe sur index-1.html. Parfait.

    Ca se corse quand je clique sur le lien "Les plus commentées". En faisant ça, je tombe sur "index-stat-comment.html". Parfait et ça marche indéfiniment. Je vais en bas de page, je clique sur le lien pour me rendre à la page 2 et je tombe sur "index-2-comment.html". Toujours parfait.

    Le problème, c'est que si je clique maintenant sur le lien 1 pour retomber sur la première page (contenant les news les plus commentées), je tombe sur:
    index-1.html au lieu de index-1-comment.html!


    Ca doit être une histoire de $_GET qui m'échappe complètement. Pouvez-vous m'aider?

    Pour info le htaccess actuel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Options +FollowSymlinks
     
    #--------------------------------------------------
    # Répertoire : /www/
    #--------------------------------------------------
     
    # Le serveur doit suivre les liens symboliques : Options +FollowSymlinks
     
     
    # Activation du module de réécriture d'URL (!!!mettre à on):
    RewriteEngine on
     
    #--------------------------------------------------
    # Règles de réécriture d'URL :
    #--------------------------------------------------
     
    # Article sans numéro de page :
    RewriteRule ^news-([0-9]+)\.html$   /detail.php?news=$1 [QSA,L]
     
    # Index avec juste un tri par commentaires ou like: index-comment.html !!!!!
    RewriteRule ^index-stat-(.*)\.html$ /index.php?stat=$1 [QSA,L]
     
    # Index avec numéro de page : index-2.html
    RewriteRule ^index-(.*)\.html$ /index.php?page=$1 [QSA,L]
     
    # Index avec numéro de page et tri : index-2-asc.html
    RewriteRule ^index-(.*)-(.*)\.html$ /index.php?page=$1&tri=$2 [QSA,L]
     
    # Index avec numéro de page et stat : index-2-comment.html
    RewriteRule ^index-(.*)-(.*)\.html$ /index.php?page=$1&stat=$2 [QSA,L]
    Et le script qui génère les liens vers les pages de news:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    //création des liens vers les pages de news 
     
    if(isset($_GET['tri']))
    	$tri = '-' . $_GET['tri'] . '.html';
    else
    	$tri = '.html';
     
    if(isset($_GET['stat']))
    	$stat = '-' . $_GET['stat'];
    else
    	$stat = '';
     
    echo '<p class=\'nav_center\'>Page : ';
     
    for($numeroPage = 1; $numeroPage <= $nombreDePages; $numeroPage++)  
    {
    	if($page === $numeroPage)
    	{
    		echo ' [<strong>'.$page.'</strong>] ';
    	}
    	else
    		echo '<a href="index-' . $numeroPage . '' . $stat . '' . $tri .'">' . $numeroPage . '</a>&nbsp;';
    }
    echo '</p>';
    Merci beaucoup à vous!

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Ce que je vais dire n'a peut-être aucun rapport avec le problème car je n'ai pas lu le code PHP mais il y a un "problème de conception" avec le .htaccess. Les lignes en cause :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # Index avec numéro de page : index-2.html
    RewriteRule ^index-(.*)\.html$ /index.php?page=$1 [QSA,L]
     
    # Index avec numéro de page et tri : index-2-asc.html
    RewriteRule ^index-(.*)-(.*)\.html$ /index.php?page=$1&tri=$2 [QSA,L]
     
    # Index avec numéro de page et stat : index-2-comment.html
    RewriteRule ^index-(.*)-(.*)\.html$ /index.php?page=$1&stat=$2 [QSA,L]
    Le problème c'est que :
    • Avec ce fichier, les 2 dernières règles ne sont jamais activées car le filtre de la première règle "^index-(.*)\.html$" englobe les filtres des deux autres règles. Donc on se retrouve toujours avec la seule première règle qui est activée, donc une query string qui ne contient jamais que le paramètre page.
    • Quand bien même le premier problème n'existerait pas, la dernière ligne n'est jamais activée car son filtre est strictement identique à la règle précédente.

    Je propose donc de commencer par mettre la première de ces 3 règles (celle avec le filtre "^index-(.*)\.html$") tout en bas du fichier.
    Pour le problème des 2 règles avec le même filtre, je te laisse nous expliquer la raison et dire comment construire des filtres plus précis.

  5. #5
    Membre averti
    Inscrit en
    Février 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 58
    Par défaut
    Merci pour tes conseils, ça a résolu mes problèmes!

    J'ai presque terminé l'url rewriting mais pour la page des catégories il y a un plantage (call to a function fetch on a non object).

    L'url de départ est du style:

    categorie.php?name=Vid%26eacute%3Bos

    Je pense que c'est le nom de la catégorie que le fichier htaccess ne reconnait pas. Une idée?

    Ah oui aussi, j'aimerais que l'internaute ne voie jamais index.php mais plutôt qu'il voie www.monsite.com et je cherche une solution à implémenter dans le htaccess sans devoir indiquer www.monsite.com car le site que je développe pourra servir à d'autres et j'essaye de dépersonnaliser le code.

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Rien compris à ton histoire de catégorie : où est-ce que tu parles de catégorie dans tout ce qui précède ? C'est quoi l'URL demandée et pourquoi dis-tu qu'Apache ne reconnaît pas le nom de la catégorie ?

    Je ne comprends pas non plus la seconde question : où est-ce que le visiteur voit index.php dans l'URL ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [URL rewriting] Une variable pour la langue
    Par Invité dans le forum Apache
    Réponses: 5
    Dernier message: 14/06/2013, 22h03
  2. [URL Rewriting] Une variable avec un espace
    Par PrOkIuM dans le forum Apache
    Réponses: 10
    Dernier message: 19/03/2008, 11h41
  3. URL rewriting pour une meilleure visibilité
    Par Yoteco dans le forum MVC
    Réponses: 13
    Dernier message: 30/08/2007, 20h50
  4. [URL Rewriting] Obtention d'une erreur 500
    Par Invité dans le forum Apache
    Réponses: 7
    Dernier message: 24/07/2007, 18h04
  5. Récupérer l'url d'une page rewritée.
    Par psychoBob dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/02/2006, 00h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo