URL Rewriting... Mais la nouvelle URL apparait dans la barre d'adresse

Discussion dans 'URL Rewriting et .htaccess' créé par bloodipunk, 25 Août 2010.

  1. bloodipunk
    bloodipunk Nouveau WRInaute
    Inscrit:
    11 Août 2010
    Messages:
    15
    J'aime reçus:
    0
    Bonjour a tous :D

    Je suis en train de mettre en place des URL rewriting sur un de mes sites et cela marche plutôt bien. Les pages sont redirigées comme je le souhaite, tout irait bien sauf que.....
    L'adresse apparaissant dans la barre d'adresse est... la nouvelle adresse URL (celle sur laquelle on redirectionne)... Certes cela pourrait paraitre logique, mais je pensais que la réécriture d'URL servait justement a cela... Masquer la véritable URL, pour des questions de sécurité et de lisibilité ou simplement de redirection...

    Peut-être suis-je dans l'erreur (?) ou y-a-t-il un paramètre pour le spécifier voici les instructions de mon .htaccess

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^reference=(.*)&surcat=(.*)&catdesc=(.*)&desc=(.*)
    RewriteRule article\.php(.*) /article/%2/%3/%4/%1.html [R=301]

    RewriteRule /article/(.*)/(.*)/(.*)/(.*)\.html /article.php?reference=$4 [L]
    </IfModule>

    la première partie, construisant une adresse .html est (en fait) pour les anciennes adresses encore indexée par les moteurs de recherche, qui étaient en PHP, le RewriteRule la "transforme" au nouvelles normes dossier+html et signale que c'est une redirection permanente.

    le deuxième RewriteRule, lui, transforme la nouvelle adresse url avec le bon fichier php d'accès aux articles.

    A priori ca se passe bien, lorsque je tape l'ancienne adresse, la transformation se fait bien (en 2 fois) et j'accède bien a la bonne page, sauf que dans la barre d'adresse, je n'ai pas ni l'adresse que j'ai saisi, ni l'adresse HTML, mais l'adresse finale :
    article.php?reference=toto !!!

    De plus, mais c'est autre chose, ca marche pas terrible lorsque je saisi directement l'adresse dossier+HTML... ca renvoi une erreur 404... (alors que si je saisi l'adresse .PHP précédente, la transformation se fait bien, en 2 temps ?)

    Ça fait en fait 2 questions.... Désolé, mais c'est surtout sur l'apparition de la redirection dans la barre d'adresse que je m'interrogeais...

    D'avance, Merci beaucoup de votre aide et de vos lumières !
    :)

    EDIT: Je précise que, bien sur, j'ai déjà parcouru le forum et consulté tous les posts traitant de "URL rewriting et adresse dans la barre" sans trouver la solution.....
    Merci de vous intéresser a mon problème et de m'aider :)
     
  2. polweb
    polweb WRInaute accro
    Inscrit:
    18 Octobre 2006
    Messages:
    3 264
    J'aime reçus:
    0
    C'est normal que ce soit l'url qui suit la dernière régle qui apparaissent dans la barre. Il me semble qu tu a une règle de trop et que tu prend le problême à l'envers?

    Rewrite cond condition sur l'adresse qui identifie la structure d'article
    rewrite rule adresse.html vers structure_d'article_mal_écrite.php

    N'oublie pas le robots.txt

    A plus.
     
  3. bloodipunk
    bloodipunk Nouveau WRInaute
    Inscrit:
    11 Août 2010
    Messages:
    15
    J'aime reçus:
    0
    Merci de ta réponse :)

    Mais en fait j'ai deux règles car je veux gérer les pages déjà indexées par Google (entre autres) qui sont de la forme :

    article.php?param1&param2&param3&param4
    et les passer en ==> /article/param2/param3/param1.html
    qui est (sera) la nouvelle forme des liens URL dans mes pages

    c'est la première règle :

    RewriteCond %{QUERY_STRING} ^reference=(.*)&surcat=(.*)&catdesc=(.*)&desc=(.*)
    RewriteRule article\.php(.*) /article/%2/%3/%4/%1.html [R=301]

    Ceci essentiellement afin d'éviter les duplicate contents...

    Mes nouveaux liens dans les pages sont (seront) du type /article/param2/param3/param1.html
    mais mes pages réelles sont toujours des pages PHP

    d'où la deuxième règle (qui s'applique éventuellement aussi sur les URL rewritées provenant de google)
    RewriteRule /article/(.*)/(.*)/(.*)/(.*)\.html /article.php?reference=$4 [L]

    qui transforme les liens de la forme:
    /article/param2/param3/param1.html
    en /article.php?reference=param1... Qui est ma page physique sur le serveur..

    Selon ce que j'ai compris du URL rewriting, le tag [R=301] permet de signaler une redirection permanente des liens article.php sur les nouveaux liens dossier+html, pour moi, ce sont donc ces liens qui doivent apparaitre dans la barre d'adresse, non ?

    Et le dernier rewrite avec [L] en fin signale que c'est le dernier rewrite, la page a été trouvée... C'est bon... Mais pourquoi afficher justement cette page ? et pas celle avec le [R=301] ??

    Merci de votre aide....

    EDIT:
    Le but de cette opération est la SEO, évidement, assigner des URL plus explicites et plus SearchEngine Friendly...
    1-> Comment réagissent alors Google et les autres moteurs si on donne un lien et que celui récupéré (barre d'adresse) diffèrent ?
    Lequel sera indexé ?...
    2-> pour des raison de sécurité, comment cacher alors ses paramètres, puisqu'ils apparaitront dans la barre d'adresse... ?

    J'avais vu sur developpez.com un schémas laissant sous-entendre que l'on passait au navigateur une URL de format HTML, que cela était réinterprété par le serveur via le .htaccess, vers un fichier PHP, traité, puis la page renvoyée vers le navigateur, mais avec le nom de la page HTML... :roll: .....

    Merci de TOUTES vos lumières sur ce sujet....
     
  4. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 929
    J'aime reçus:
    0
    essaye d'ajouter un paramètre et une petite condition pour éviter la redirection après la réécriture :
    Code:
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{QUERY_STRING} ! &rewrite
    RewriteCond %{QUERY_STRING} ^reference=(.*)&surcat=(.*)&catdesc=(.*)&desc=(.*)
    RewriteRule article\.php(.*) /article/%2/%3/%4/%1.html [R=301]
    
    RewriteRule /article/(.*)/(.*)/(.*)/(.*)\.html /article.php?reference=$4&rewrite [L]
    </IfModule>
     
  5. bloodipunk
    bloodipunk Nouveau WRInaute
    Inscrit:
    11 Août 2010
    Messages:
    15
    J'aime reçus:
    0
    :cry: :cry:
    Non, Non, je ne me fait pas comprendre...
    ca marche comme je veux.... Au niveau des redirections en tout cas...
    Les anciennes pages (Google et autres) sont bien redirectionees (Permanently pour que le moteur le comprenne) vers leur version "Fake" HTML... Puis reconvertie en URL réelle PHP avec les paramètres...
    Et les nouveaux liens sont, eux aussi, reconvertis dans la bonne URL a traiter
    Jusqu'ici tout va bien...

    En fait la seule chose qui me chagrine est que :
    si on tape l'URL : /article/accessoires/mode/sacs/toto.html,
    l'URL est bien rewritée vers la page PHP correspondante... Normal, pas de soucis, MAIS /article/accessoires/mode/sacs/toto.html n'apparait pas dans la barre d'adresse... c'est article.php?liste_des_parametres qui apparait !!!
    Et je veux pas !!! Il FAUT que ce soit la page HTML qui apparaisse comme montré ici...

    S'il vous plait quelqu'un.... :cry: :cry:

    PS: d'ailleurs de toute façon l'instruction RewriteCond %{QUERY_STRING} ! &rewrite donne une erreur 500... :(
     
  6. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 929
    J'aime reçus:
    0
    je suis quasi sur que c'est ta redirection qui fait ca. As-tu essayé de ne mettre que la réécriture (sans la redirection)?
     
  7. bloodipunk
    bloodipunk Nouveau WRInaute
    Inscrit:
    11 Août 2010
    Messages:
    15
    J'aime reçus:
    0
    Euhhh. Que veux-tu dire ?

    si j'enlève la deuxième rewriterule, je me retrouve bien avec l'URL HTML dans la barre d'adresse, mais comme la page physique n'existe pas, j'ai une erreur 404.... 8O .... :(

    Comme je le dit, les redirect marche comme je le souhaite, c'est juste que c'est l'URL de rewrite avec le PHP et tous les paramètres qui apparait dans la barre d'adresse et non l'URL avec le HTML...

    J'ai fait des tests simplissime genre
    RewriteRule (.*) /index.php
    et effectivement, je re3tourne bien sur index.php, quelque soit la page demandée, mais c'est toujours index.php qui apparait dans la barre d'adresse !!!

    J'en arrive a me poser juste une simple question :
    Peut-on réellement utiliser le URL rewriting pour masquer ses vrais URL ?
    genre que l'utilisateur (et les moteurs) voient toujours "toto-tata-titi.html", alors que la vrai page est "article.php?ref=toto&cat=tata&sort=titi" ?
     
  8. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 929
    J'aime reçus:
    0
    Je conseille de garder uniquement la réécriture. Ca permettra de voir si elle fonctionne et si elle n'est pas parasitée par la redirection quand elle est présente.
     
  9. bloodipunk
    bloodipunk Nouveau WRInaute
    Inscrit:
    11 Août 2010
    Messages:
    15
    J'aime reçus:
    0
    Merci de tes reponses :D
    Mais je ne te suis pas...

    Pour être plus clair, je refait un topo plus simple de mon problème :

    Ancienne URL (plus du tout utilisée en Lien sur le site, mais indexée par Google et autres) :
    article.php?reference=toto&surcat=tata&catdesc=titi&desc=tutu

    Nouvelle URL (désormais utilisée partout dans les pages du site) :
    /article/tata/titi/tutu/toto.html

    URL réelle Physiquement présente sur le site (utilisée pour créer la page demandée) :
    article.php?reference=toto

    1 - Lorsque je saisie
    "article.php?reference=toto&surcat=tata&catdesc=titi&desc=tutu"
    dans la barre d'adresse,
    la page affichée est bien
    "article.php?reference=toto",
    la redirection se fait donc bien (en 2 fois, d'abord transformation en HTML puis retransformation en article.php?reference=xx)

    2 - Lorsque je saisie
    "/article/tata/titi/tutu/toto.html"
    dans la barre d'adresse
    la page affichée est bien
    "article.php?reference=toto",
    la redirection se fait donc bien...

    MAIS dans tous les cas, c'est
    "article.php?reference=toto"
    qui apparait dans la barre d'adresse (logique me direz-vous), mais si j'utilise justement le URL rewriting c'est parce que je veux masquer mes URL reelles et voir
    "/article/tata/titi/tutu/toto.html"
    dans la barre d'adresse...

    Je pensais que c'était justement une des utilités de la réécriture d'URL, pouvoir faire de la SEO et reformater les URL vues par les visiteurs et les moteurs et, la, je sais plus.....
     
  10. Djibou_Te@M
    Djibou_Te@M WRInaute occasionnel
    Inscrit:
    20 Avril 2010
    Messages:
    406
    J'aime reçus:
    0
    Bonjour,

    il me semble aussi que ce que t'as dit Forty est juste :

    La redirection parasite le rewriteRule du dessous.

    si tu appelles /article/tata/titi/tutu/toto.html, cela passe dans le rewriteRUle[L] et donc appelle la page article.php
    du coup cela repasse par le htaccess et là, comme le htaccess appelle article.php, il le redirige en 301 en passant par la première ligne....

    Cela peut surcharger facilement, 2 appels au htaccess pour une page...
    Il me semble ...affaire à suivre, dis nous si tu trouves. :wink:
     
  11. bloodipunk
    bloodipunk Nouveau WRInaute
    Inscrit:
    11 Août 2010
    Messages:
    15
    J'aime reçus:
    0
    Merci de ta réponse Djibou-te@m
    J'ai donc essayé de virer le
    RewriteRule article\.php(.*) /article/%2/%3/%4/%1.html [R=301]
    comme tu (et Forty) le conseillait...
    Il ne reste donc qu'UNE seule instruction simplissime :
    RewriteRule /article/(.*)/(.*)/(.*)/(.*)\.html /article.php?reference=$4 [L]

    Mais pareil..... :cry: :cry: :cry: :cry: :cry: :cry:

    La redirection se fait bien sur la bonne page : "article.php?reference=toto" mais c'est aussi "article.php?reference=toto" qui apparait dans la barre d'adresse...

    Donc, je vais juste poser une question :
    Peut-on utiliser l'URL Rewriting pour la SEO, c'est-a dire que l'utilisateur (et les moteurs) ne voit que des URL claires dans les liens des pages du site (ca, ok...) mais aussi dans la barre d'adresse..... ?

    En gros est-ce bien comme cela que cela se passe :
    1. utilisateur clique sur (ou saisit directement dans la barre d'adresse) /article/tata/titi/tutu/toto.html
    2. Serveur interprète via .htaccess et exécute la page article.php?reference=toto
    3. la page ainsi construite est renvoyée par le serveur sur le navigateur sous le nom /article/tata/titi/tutu/toto.html

    Parce que apparemment ce n'est pas le cas....

    Merci de votre aide...

    Si c'est possible j'aimerai savoir comment... :D
    Si ce n'est pas possible, j'aimerai alors comprendre pourquoi on dit que l'URL Rewriting peut être utilisé pour masquer les URLs (par sécurité ou pour la SEO).... Car la, je ne saisi pas bien le mécanisme :roll:
     
  12. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 929
    J'aime reçus:
    0
    la réécriture marche très bien pour ce que tu souhaites faire : la règle avec [L] est faite pour ca (masquer l'url réelle).

    Il y a surement une autre règle dans ton fichier qui parasite la réécriture ou une redirection en php avec la fonction header().
     
  13. bloodipunk
    bloodipunk Nouveau WRInaute
    Inscrit:
    11 Août 2010
    Messages:
    15
    J'aime reçus:
    0
    Merci de ta réponse, je suis heureux d'apprendre que c'est effectivement possible...

    Mais alors pourquoi cela ne fonctionne-t-il pas ?
    Il n'y a aucun redirectionnement PHP, tout se fait via le rewriterule...

    Voici mon .htaccess exact :
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^reference=(.*)&surcat=(.*)&catdesc=(.*)&desc=(.*)
    RewriteRule article\.php(.*) /art/%2/%3/%4/%1.html [R=301]

    RewriteRule /art/(.*)/(.*)/(.*)/(.*)\.html http://www.monsite.com/article.php?reference=$4 [L]
    </IfModule>

    si je vire http://www.monsite.com/... Rien ne se passe du tout...

    tel qu'il est il fonctionnerait pas mal... En tout cas semble faire ce que je souhaite puisqu'en saisissant l'URLs dans la barre d'adresse (ancienne URL avec php+param) cela me mène bien sur la bonne page finale article.php?reference=toto, comme je le souhaite.

    Le seul problème est que ce n'est pas l'URL dossier+html qui apparait dans la barre d'adresse.. rien du tout, a priori... :(

    1. Lorsque je vire les 2 premieres lignes avec le rewritecond, il ne me reste alors
    RewriteRule /art/(.*)/(.*)/(.*)/(.*)\.html http://www.monsite.com/article.php?reference=$4 [L]
    si je saisi dossier+HTML dans la barre d'adresse => erreur 404 !!! la redirection ne fonctionne pas ???

    Pourquoi cela fonctionne-t-il avec la version de départ :
    quand je saisi article.php?reference=toto&surcat=tutu&catdesc=tata&desc=titi, j'arrive bien sur la bonne URL (preuve que les redirections fonctionnent)
    Alors que en saisissant art/tutu/tata/titi/toto.html, avec ou sans le rewritecond, cela change tout et ne marche pas du tout, même si le rewritecond n'est pas utilisé (alors que ca marche avec easyPHP avec ancienne URL ou nouvelle dossier+html...) ???

    Aaarggghhh... S'il vous plait de l'aide... Je deviens fou... :p 8O :?
     
  14. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 929
    J'aime reçus:
    0
    si tu ne donnes pas ton htaccess exact c'est normal qu'on arrive pas a t'aider.
    Si tu mets l'url complète avec "http://" ca fait une redirection. C'est le fonctionnement normal du module rewrite.
    Que se passe-t-il si tu enlève "http://www.tonsite.com" ?
     
  15. bloodipunk
    bloodipunk Nouveau WRInaute
    Inscrit:
    11 Août 2010
    Messages:
    15
    J'aime reçus:
    0
    Merci de tes réponses...

    J'ai bien essayé de ne pas mettre le http://....,juste avec
    RewriteRule /art/(.*)/(.*)/(.*)/(.*)\.html /article.php?reference=$4 [L]
    Mais la... Rien ne se passe... Plus de redirectionnement :

    Maintenant mon htaccess est comme suit, sans nom de site en dur :
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^reference=(.*)&surcat=(.*)&catdesc=(.*)&desc=(.*)
    RewriteRule article\.php(.*) /art/%2/%3/%4/%1.html [R=301]

    RewriteRule /art/(.*)/(.*)/(.*)/(.*)\.html /article.php?reference=$4 [L]
    </IfModule>

    Mais du coup, le redirectionnement ne fonctionne plus du tout, genre il; ne semble rien se passer (en tout cas, si je tape article.php?reference=toto&surcat=tata&catdesc=tutu&desc=titi, j'ai la même adresse URL dans la barre d'adresse... c'est ce que je veux, certes, pas de changement, mais la, justement je voudrais voir art/tata/tutu/titi/toto.html... Si c'est possible... Mais bon, admettons que effectivement la redirection se fait... Sans changement de l'URL...)

    Mais quand je saisi directement http://www.monsite.com/art/tata/tutu/titi/toto.html dans la barre d'adresse... Selon le .htaccess (assez simple tout de même)... Pareil... Boum... erreur 404... aaaaaaaaaaaaaarrrrrrrrggghhhhh... ... Je m'en sors pas... Plus ca va pire c'est... Ça marche de moins en moins.....

    Merci de continuer a m'aider.... On va bien trouver, une simple petite histoire de barre d'adresse....... :cry:
     
  16. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 929
    J'aime reçus:
    0
    essaye de remplacer la réécriture par cette ligne :
    Code:
    RewriteRule /art/[^/]*/[^/]*/[^/]*/([^/]*)\.html /article.php?reference=$1 [L]
    PS : j'ai enlevé les parenthèses car tu n'as besoin de récupérer qu'un seul paramètre
     
  17. bloodipunk
    bloodipunk Nouveau WRInaute
    Inscrit:
    11 Août 2010
    Messages:
    15
    J'aime reçus:
    0
    merci de toutes tes réponses et de l'intérêt que tu portes a résoudre mon problème :D

    j'ai donc modifier le .htaccess avec ta ligne :
    RewriteRule /art/[^/]*/[^/]*/[^/]*/'[^/]*)\.html /article.php?reference=$1 [L]

    => error 500... j'ai virer la derniere parenthese
    RewriteRule /art/[^/]*/[^/]*/[^/]*/'[^/]*\.html /article.php?reference=$1 [L]

    Et boum, pareil, erreur 404...

    Je m'y perd.....

    D'autant que j'ai un .htaccess sous easyphp qui marche tres bien... :( ... Mais pas sur le serveur... mais c'est vrai que je bidouille avec http://www.monsite.com pour easyphp.... Mais ca marche très très bien et ca redirectionne niquel, si ce n'était cet petit PB de barre d'adresse...

    J'en deviens fou !!!
    JE vais aller me coucher (et oui, ici c'est GMT+7)... En espérant que la nuit porte conseil (ca arrive de trouver des bugs au réveil... si si si).... Ou plutôt qu'en regardant le forum au réveil... tu ais une super solution.......

    Merci
     
  18. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 929
    J'aime reçus:
    0
    j'ai ripé avec la parenthèse transformée en quote. J'ai édité.
     
  19. bloodipunk
    bloodipunk Nouveau WRInaute
    Inscrit:
    11 Août 2010
    Messages:
    15
    J'aime reçus:
    0
    [Résolu] URL Rewriting... Mais la nouvelle URL apparait dans la barre d'adresse

    Bonjour... Et merci de tes réponses

    Bon j'ai un peu progressé depuis hier en corrigeant quelques fautes de syntaxes...

    voici mon nouveau .htaccess
    J'ai ajoute le ? et la clause L dans le 1er rewriterule
    et j'ai virer le / devant art(.*)/(.*)/(.*)/(.*)\.html....... (Merci Mac :wink: )

    Et maintenant ca marcherait parfaitement si.... La page s'affichait correctement...
    Le rewrite est OK, je suis bien redirectionné sur
    et je garde bien
    dans la barre d'adresse :D :D :D

    MAIS... La page n'apparait pas comme elle le devrait :
    1. elle est très longue a charger
    2. les fichiers css et js semblent ne pas être inclus (pas de charte graphique et pas d'anim... Beuark)

    Oh lalalala.... Et un nouveau problème...
    j'inclus ces fichiers tout a fait normalement dans mon fichier article.php
    EDIT
    Merci beaucoup de ton aide....
    Je ferme ce Post comme résolu... :D :D :D
     
  20. forty
    forty WRInaute passionné
    Inscrit:
    30 Octobre 2008
    Messages:
    1 929
    J'aime reçus:
    0
    tu peux aussi mettre les chemins depuis la racine (en commençant le chemin par /) pour éviter les problèmes de lien relatifs :
    Code:
    <link rel="stylesheet" type="text/css" href="/cssfile/common.css" media="screen" />
     
  21. bloodipunk
    bloodipunk Nouveau WRInaute
    Inscrit:
    11 Août 2010
    Messages:
    15
    J'aime reçus:
    0
    Effectivement,
    Mais le but de l'opération est, pour le moment, de toucher au minimum aux sources PHP...

    merci de ta réponse :D

    Au fait, on fait comment pour taguer un post [résolu] ?
     
Chargement...
Similar Threads - Rewriting nouvelle apparait Forum Date
URL rewriting et REGEX bonnes pratiques Développement d'un site Web ou d'une appli mobile 9 Septembre 2020
supprimer /index.html sans url rewriting, possible ? URL Rewriting et .htaccess 13 Novembre 2019
Je bloque sur le rewriting des URL contenant un ? URL Rewriting et .htaccess 3 Septembre 2019
récupération du get après rewriting URL Rewriting et .htaccess 21 Juin 2019
Ralentissement url rewriting URL Rewriting et .htaccess 1 Mai 2019
URL Rewriting Débuter en référencement 17 Avril 2019
Conflit de redirection 301 et Urlrewriting Netlinking, backlinks, liens et redirections 20 Février 2019
URL REWRITING et redirection 301 URL Rewriting et .htaccess 24 Janvier 2019
URL Rewriting : difficultés avec RewriteCond ? URL Rewriting et .htaccess 5 Décembre 2018
Résolu URL Rewriting : Garder l'adresse non transformée dans le navigateur URL Rewriting et .htaccess 2 Décembre 2018