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] Changer les liens dans les pages


Sujet :

Apache

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Points : 12
    Points
    12
    Par défaut [URL rewriting] Changer les liens dans les pages
    Bonjour,

    J'ai un problème avec mes règles dans le fichier htaccess. J'ai un fichier qui s'appelle index.php5 et qui me sert de contrôleur général, c'est a dire qu'il va renvoyer l'utilisateur sur les pages qu'il demande. Par exemple il y a un menu accueil et lorsqu'un utilisateur clique dessus le contrôleur va le rediriger vers la page accueil.html.
    Le problème c'est que l'url qui reste affichée c'est :
    index.php5?module=accueil&action=accueil

    J'ai donc voulu faire une règle de redirection comme décrite Ici. A partir de cet exemple j'arrive a ma règle qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RewriteEngine On
    RewriteRule ^index-([^-]*)-([^-]*)\.html$  /index.php5?module=$1&action=$2 [L]
    Mon problème c'est que l'url ne change pas.
    J'ai testé pour voir si le fichier .htaccess était bien reconnu par le serveur avec cette instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     RewriteRule ^index.php5$ /trouver.html [L]
    Aucun problème la redirection s'exécute. Par contre si je le remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^index.php5?module=accueil&action=accueil$ /trouver.html [L]
    La redirection ne s'exécute plus.

    Merci de bien vouloir m'aider.

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    Attention à ne pas confondre : l'URL rewriting va modifier la façon dont le serveur va interpréter une URL demandée par un navigateur ; en aucun cas, l'URL rewriting ne va modifier le code HTML renvoyer au navigateur. Donc, si dans ta page, éventuellement renvoyée avec une jolie URL comme tu veux, contient une URL pas comme tu veux, charge à toi de modifier le code HTML de tes pages pour mettre les vraies belles URL.

    Sinon, par défaut, mod_rewrite ne travaille pas sur la query string, donc c'est normal que ton second exemple ne fonctionne pas. En revanche, ton premier exemple fonctionne avec des URL du type /index-titi-toto.html (j'ai testé sur mon EasyPHP). Donc il faut que ton code HTML contienne ce /index-titi-toto.html.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta réponse.

    En fait ce que je demandais c'est que j'avais comme adresse :
    index.php5?module=accueil&action=accueil

    Et je voulais que le navigateur affiche :
    index-accueil-accueil.html


    Est ce que c'est possible grâce a l'url rewriting? Ou bien faut-il écrire un petit programme style en javascript qui modifie l'url dans le navigateur?

    Soit autre solution mettre comme lien dans les formulaires :
    index-accueil-accueil.html et écrire des règles permettant de transformer l'url pour que le serveur comprenne index.php5?module=accueil&action=accueil

    Merci

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    Je viens de le dire : il faut que ton code HTML contienne la bonne URL, l'URL rewriting n'aidera en rien là-dedans. Avec l'URL rewriting, une fois que le navigateur affiche index-accueil-accueil.html, tu vas pouvoir dire à Apache "au fait, ce n'est pas /index-accueil-accueil.html mais /index.php5?module=accueil&action=accueil" mais c'est à Apache que tu dis ça, pas au navigateur.

    Tu peux quand même envisager un JavaScript pour changer l'URL mais ce n'est pas terrible niveau référencement : Google conservera les URL index.php5?module=accueil&action=accueil. Si tu veux vraiment, on pourra t'aider à écrire ce JavaScript.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta réponse.

    Je pense que je vais accepter ta proposition pour m'aider a écrire un petit bout de code en javascript permettant de modifier l'url.

    J'ai effectué plusieurs tests mais je suis confronté au problème que lorsque je change l'url en javascript le navigateur recharge automatiquement la page.
    En effectuant des recherches sur internet j'ai trouvé que ce n'était pas possible pour des problèmes de phishing. Y a t-il une solution que je n'ai pas trouvée ou bien une autre solution?

    Merci de m'aider

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    Faut ajouter un script déclenché quand ta page est chargée (<body onload="mafonction();">) qui parcourt tous les liens de ta page (document.getElementsByTagName("a")), regarde la valeur du href et la modifie si nécessaire.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    J'ai suivi ton conseil et j'ai créé une petite fonction javascript pour le faire :
    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
     
    var aParametre = document.getElementsByTagName("a");
     
            var num = aParametre.length;
            //alert("Il y a " + num + " éléments <a> dans ce document.");
            //Parcourt de toutes la listes des élément A
            for(i=0;i<num;i++)
            {
              //Si il y a des attributs
              if(aParametre.item(i).hasAttributes() == true)
              {
                //On parcourt les éléments
                for(y=0;y<aParametre.item(i).attributes.length;y++)
                {
                  //Si le lien est bon
                  if(aParametre.item(i).attributes[y].value != "#")
                  {
                    //Changement de l'attribut href
                    aParametre.item(i).setAttribute(aParametre.item(i).attributes[y].name,"a");
                  }
                }
              }
            }
    Cette fonction changeait bien l'attribut href de la balise a, mais le problème que je rencontre c'est que dans l'url au clique il y a toujours l'ancienne url qui apparait. Je ne trouve pas comment faire pour mettre l'url modifiée grâce a la fonction javascript.

    Merci

  8. #8
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu es sûr que c'est le bon code pour changer le href ? J'ai fait un test avec aParametre.item(i).href et ça marche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <script>
    function changeLinks() {
    	var aParametre = document.getElementsByTagName("a");
    	var num = aParametre.length;
    	for(i=0; i < num; i++) {
    		aParametre.item(i).href = aParametre.item(i).href.replace("lien?aa=", "/lien/aa/");
    		alert(aParametre.item(i).href);
    	}
    }
    </script>
    </head>
    
    <body onload="changeLinks();">
    ...

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    La façon que vous m'avez décrite marche de façon temporaire mais les modifications ne sont pas prises en compte sur le reste de la page. C'est à dire que lorsque je modifie dans le javascript appelé au chargement du body les modifications sont faites mais ne restent pas, après lorsque on clique sur le lien c'est l'url non modifiée qui s'affiche.

    Pour résoudre ce problème j'ai ajouté un Id à chaque balise <a> et j'y accède par cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.getElementById("mon_lien").href = "index-option1-option2.html";
    après je rajoute dans le fichier htaccess

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RewriteRule ^index-([^-]*)-([^-]*)\.html$  /index.php5?mapremiereoption=$1&masecondeoption=$2  [L]
    Ainsi les liens sont modifiés dans la statut bar et dans l'url. De plus avec le htaccess les pages pointent au bon endroit.

    Merci pour ton aide

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/11/2012, 23h57
  2. erreur dans les liens internes à une page
    Par webfds dans le forum Langage
    Réponses: 4
    Dernier message: 12/10/2010, 18h59
  3. [TWebBrowser] Comment trouver tous les liens dans une page ?
    Par xenos dans le forum Composants VCL
    Réponses: 1
    Dernier message: 15/01/2006, 23h36
  4. Réponses: 7
    Dernier message: 14/09/2005, 10h50

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