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 :

Redirection dans les deux sens, pas de duplicate content.


Sujet :

Apache

  1. #1
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 87
    Points : 90
    Points
    90
    Par défaut Redirection dans les deux sens, pas de duplicate content.
    Salut,


    suite à ce post : http://www.developpez.net/forums/d60...a/#post3556241

    J'ai encore une question...


    Je veux que index.html (fictif) soit redirigé sur index.php. Ca c'est bon, mais je veux qu'un lien pointant de l'éxtérieur appelé index.php soit renomé de manière permanente (301) en index.html qui doit toujours redirigé sur index.php.

    J'ai donc essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule ^index\.php <a href="http://localhost:8888/dublin/index.html" target="_blank">http://localhost:8888/dublin/index.html</a> [R=301]
    RewriteRule ^index\.html <a href="http://localhost:8888/dublin/index.php" target="_blank">http://localhost:8888/dublin/index.php</a> [L]
    Malheureusement, apache interprète ça comme une boucle malgré le L. Donc si je ne peux pas faire deux redirections d'affilé, comment je fais?

    J'ai vu sur des forums qu'on peut empêcher google d'indéxer index.php pour ne garder que les urls propres mais dans ce cas, on pert tous les liens extérieurs dans le page ranking, non?

    Je galère :p

  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
    Citation Envoyé par FCDB Voir le message
    Malheureusement, apache interprète ça comme une boucle malgré le L.
    Pour l'explication de la boucle, voir cette discussion : [L] n'empêche pas de boucler, il interrompt la boucle courante de réécriture. mod_rewrite applique plusieurs fois de suite les règles jusqu'à "converger", c'est-à-dire obtenir une URL définitive qui ne peut plus être réécrite. C'est pour ça qu'une URL correcte en .html est réécrite en interne en .php mais repasse par la redirection externe vers .html. Le contournement que je donne dans la discussion indiquée devrait faire l'affaire pour identifier les réécritures internes et externes.

    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 régulier
    Inscrit en
    Mai 2005
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 87
    Points : 90
    Points
    90
    Par défaut
    Salut,

    Merci pour l'astuce.

    Ca ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RewriteRule ^index\.html$ http://localhost:8888/dublin/index.php?intern=1 [L]
    RewriteCond %{QUERY_STRING} !intern=1
    RewriteRule ^index\.php$ http://localhost:8888/dublin/index.html [R=301,L]
    Par contre je n'arrive pas à gérer les paramètres GET. Car je veux transformer des index.php?page=...&lang=... en URL réecrite propement et sans les GET.

    Hors je ne trouve pas comment:
    - retirer les get de l'url
    - récupérer les valeurs des get ou les tester dans les conditions

    Ce que je veux faire pour être plus précis c'est suivre ces étapes :

    URL rentrée externe au site :
    /index.php?page=contact_us&lang=English

    transformée en :
    English/contact_us.html


    Si c'est interne :

    English/contact_us.html
    transformée en
    /index.php?page=contact_us&lang=English&intern=1


    Donc ma question, c'est comment faire ça :
    /index.php?page=contact_us&lang=English --> English/contact_us.html

    Merci par avance

  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
    Il faut d'abord rajouter un QSA dans les [] des RewriteRules, je pense, histoire d'assurer la propagation des divers paramètres d'URL.

    Ensuite, il devrait suffire d'écrire des RewriteRules pour les URL /English/..., sans tenir compte du précédent grâce au QSA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(English|French)/(.*)\.html$ /index.php?page=$2&lang=$1 [QSA,L]
    Je ne suis pas sûr du (English|French), je n'ai jamais trop bien maîtrisé cette syntaxe.

    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 régulier
    Inscrit en
    Mai 2005
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 87
    Points : 90
    Points
    90
    Par défaut
    Je ne suis pas sûr de bien comprendre l'utilité du QSA. J'ai déjà écrite la modification dans ce sens. Il y a une dixaine de langues donc la syntaxe est un peu plus compliqué que ce que tu as mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([A-Z]*[a-z]+)(/([a-z_A-Z]+))\.html http://localhost:8888/dublin/index.php?page=$3&lang=$1&intern=1 [L]
    Mon probème c'est pour les liens externes au site (j'ai changé tous les liens dans le site...) qui comporte l'ancien modèle d'url (index.php?page=""&lang="")...

  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
    Je ne comprends pas : avec une tes syntaxes, le navigateur est redirigé vers une URL avec tous les paramètres : j'ai cru comprendre que tu voulais les masquer pour n'utiliser que des URL simples en /English/xxx.html Tu veux faire quoi exactement ? Pour les anciennes URL qui utilisent .php?..., il faut utiliser ma gruge et pour le reste, ne surtout pas mettre de http://localhost:8888/ dans les RewriteRule : une fois de plus, si tu les mets, le navigateur les affichera dans la barre d'adresse.

    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 régulier
    Inscrit en
    Mai 2005
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 87
    Points : 90
    Points
    90
    Par défaut
    J'affiche des urls simples effictivement. Tous les liens sont remplacés sur le site par ces adresses. Par contre, je veux que les liens provenants d'autres sites avec des urls toutes moches soient redirigées directement (R=301) vers les belles urls qui elles-meme affiche le contenu de l'url moche.

    En gros je veux faire ce que j'ai fais pour index.php qui est redirigé en index.html mais qui affiche le contenu de index.php pour les urls plus complexes.

    raaaaaaaaaah apache !!

  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
    C'est exactement la même chose : repérer les URL en index.php qui viennent de l'intérieur après réécriture en ajoutant un paramètre d'URL fictif et le tester. Ca donnerait un truc du genre, exactement comme tu l'as fait. La difficulté c'est travailler avec la query string pour reconstruire l'URL en .html à partir des paramètres PHP. Le plus simple, c'est quand même d'utiliser un script PHP de redirection, car construire une RewriteRule qui prend en charge plusieurs paramètres d'URL quelque soit leur ordre, ça dépasse de très très loin mes compétences :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteCond %{REQUEST_URI} index\.php
    RewriteCond %{QUERY_STRING} !intern=1
    RewriteRule .* /redirection_externe.php [QSA,L]
    Et dans redirection_externe.php, tu récupères les différents paramètres d'URL, tu reconstruis l'URL finale et tu rediriges :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    header("Location: http://tonsite.com/".$_GET["lang"]."/".$_GET["page"].".html");
    ?>
    ATTENTION !!! Code d'exemple pas propre et à sécuriser.

    Mais j'insiste : tes règles sont mauvaises dans le sens où si tu mets http://... dans le RewriteRule, la redirection se fait côté navigateur, ce n'est pas transparent : si tu regardes la barre d'adresse, y a tes index.php?...

    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 régulier
    Inscrit en
    Mai 2005
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 87
    Points : 90
    Points
    90
    Par défaut
    Je vais essayé ça.

    Je comprends pas pourquoi mais j'ai vraiment pas trouvé de bonne doc (même en anglais sur ce sujet). Tous les tutos montrent comment faire de jolies URL et basta.

    Merci encore Mac

  10. #10
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 87
    Points : 90
    Points
    90
    Par défaut
    Si jamais quelqu'un cherche à faire quelque chose de similaire. Sachez qu'il faut également rediriger index.php tout cour vers index.html et index.html vers index.php?intern=1 pour éviter une autre boucle et après ça fonctionne

    Faut aussi vérifier le contenu des GET comme l'a rappellé Mac.

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

Discussions similaires

  1. Appel ST2030 vers extérieur : pas de son dans les deux sens
    Par Ali Amrouni dans le forum Dépannage et Assistance
    Réponses: 0
    Dernier message: 10/07/2012, 01h45
  2. lier des cellules dans les deux sens
    Par noisat dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 30/06/2008, 16h42
  3. [Oracle 8i] Jointure externe dans les deux sens
    Par Drizzt [Drone38] dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/09/2006, 15h10
  4. Double HashMap (Parcours dans les deux sens)
    Par Graffity dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/02/2006, 11h02
  5. Association navigables dans les deux sens
    Par DarkNagash dans le forum Diagrammes de Classes
    Réponses: 4
    Dernier message: 13/07/2005, 15h11

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