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 :

Réécriture et redirection en même temps


Sujet :

Apache

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 65
    Par défaut Réécriture et redirection en même temps
    Bonjour

    j arrive pas a exécuter simultanément la réécriture et la redirection à travers mon fichier .HTACCESS

    ci-dessous mon .HTACCESS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule   ^marque-azerty.html$   modele_marque.php?id=2  [R=301,L]
    RewriteRule   ^marque-qwerty.html$   modele_marque.php?id=3  [R=301,L]
    en fait la réécriture d url elle marche mais pas la redirection
    cad si je clique sur un lien du genre www.monsite.com/modele_marque.php?id=2 je veux avoir dans l url
    www.monsite.com/marque-azerty.html

    et merci d avance .

  2. #2
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    Tu n'as pas compris le principe de la réécriture d'URL, la seule URL que tu dois utiliser, c'est celle-ci : marque-azerty.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="/marque-azerty.html" title="Produits de la marque Aerty">Azerty</a>

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 65
    Par défaut
    Bonjour

    ThomasR merci pour ta réponse , mais j ai pas compris qu'est ce que tu veux dire ?

  4. #4
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Je veux dire que dans ton code HTML tes liens doivent avoir pour cible /marque-azerty et non modele_marque.php?id=2.

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 65
    Par défaut
    oui ca c est fait ...

    mais je parle des moteurs de recherche tel google , il a déjà indexé mes anciennes url "modele_marque.php?id=2" donc moi je veux lorsque je fais ma recherche sur google et qu'il m affiche les anciennes url dés que je clique dessus j ai une redirection vers les nouvelles url "marque-qwerty.html"

    j espère être claire

  6. #6
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Il faut mettre en place des redirections 302 dans ce cas, en plus de tes règles de réécriture.

    Soit avec PHP, soit directement avec Apache (directives htaccess).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RewriteRule /modele_marque.php?id=2 /marque-qwerty.html [L,R=302]

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 65
    Par défaut
    non malheureusement ca marche pas , il m affiche toujours l ancienne url.

    voila un apercu de mon fichier .HTACCESS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule   ^marque-azerty.html$   modele_marque.php?id=2  [L,R=302]

  8. #8
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    C'est qui "il" ?

    As-tu modifié tes liens ?

    Aussi, tu as mal copié le code que je t'ai donné, tu ne fais pas référence à la racine.

  9. #9
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 65
    Par défaut
    ah oui j ai corrigé

    "il" je parle de la barre d adresse du navigateur

    voila mon fichier .HTACCESS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule   ^marque-azerty.html$   modele_marque.php?id=2  [L]
    RewriteRule /modele_marque.php?id=2 /marque-azerty.html [L,R=302]
    Mais ca marche pas encore

  10. #10
    Membre averti
    Inscrit en
    Février 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 17
    Par défaut
    alors, d'après de vieux souvenir, [L] signifique que c'est une règle finale, non?

    du coup, ca deviendrait plutôt ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule /modele_marque.php?id=2 /marque-azerty.html [R=303]
    RewriteRule   ^marque-azerty.html$   modele_marque.php?id=2  [L]
    (1) Verifie que R=303 peut être mis tout seul).
    (2) c'est probablement a rectifier, je ne suis pas un crack des htaccess. Je pense cependant que le problème viens du fait que ta redirection /modele_marque.php?id=2 est une regle finale ).

    Sayn .
    PS: noobisme en htaccess et très vieux souvenirs font rarement bon ménage, alors attends peut etre la réponse d'experts pour une solution "definitive" .
    PS2:n'oublie pas de bien mettre la redirection de ton modele_marque.php -> html AVANT celle du .html->.php
    PS3: merci pour la modération : manque d'habitude.

  11. #11
    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
    Citation Envoyé par Ciceronfr Voir le message
    alors, d'après de vieux souvenir, [L] signifique que c'est une règle finale, non?
    Oui et non : [L] mettra fin au cycle de réécriture en cours mais pas au process de réécriture global. En gros, Apache va exécuter toutes les règles plusieurs fois de suite jusqu'à converger vers une URL qui ne change plus. Lorsqu'il trouve une URL qui ne change plus, il est content et arrête la réécriture là. [L] intervient là dedans pour mettre fin à une première passe de réécriture (i.e. ne pas exécuter les règles qu'il y a en dessous), mais pas toute la réécriture dans son ensemble. Ca explique que la règle suivante aboutisse à une boucle infinie (et une erreur 500) malgré la présence du [L] :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule (.*) /toto/$1 [L]
    Avec cette règle, on aboutit à /toto/toto/toto/toto/toto/toto/toto/toto/toto/... jusqu'à plus soif alors qu'il y a un [L].

  12. #12
    Membre averti
    Inscrit en
    Février 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 17
    Par défaut
    alors ce n'est d'aucune aide pour Zaiim ...
    ... mais d'une grande utilité pour moi .
    Merci pour l'information!
    Sayn.

  13. #13
    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
    Citation Envoyé par zaiim Voir le message
    ah oui j ai corrigé

    "il" je parle de la barre d adresse du navigateur

    voila mon fichier .HTACCESS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule   ^marque-azerty.html$   modele_marque.php?id=2  [L]
    RewriteRule /modele_marque.php?id=2 /marque-azerty.html [L,R=302]
    Mais ca marche pas encore
    Il faut gruger. A cause de ce que j'ai expliqué précédemment, on ne peut pas juste dire "rediriger /modele_marque.php?id=2 sur /marque-azerty.html" car cela redirigerait aussi la réécriture ^marque-azerty.html$ vers modele_marque.php?id=2 malgré le [L]. Il faut donc pouvoir différencier l'URL modele_marque.php?id=2 issue d'une réécriture par Apache et une URL modele_marque.php?id=2 venant directement d'un navigateur. Cela se fait en ajoutant une variable bidon lors d'une réécriture interne et qu'on vérifie sur une redirection modele_marque.php?id=2 vers ^marque-azerty.html$. Il faut en outre savoir (ou se rappeler, c'est selon) que par défaut le filtre qui est le premier membre d'une RewriteRule ne vérifie pas la query string. Globalement, ça donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteCond %{QUERY_STRING} !internal_redirect=1
    RewriteCond %{QUERY_STRING} id=2
    RewriteRule /modele_marque.php /marque-azerty.html [R=301,L]
     
    RewriteRule ^marque-azerty.html$ modele_marque.php?id=2&internal_redirect=1 [L]

  14. #14
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 65
    Par défaut
    Merci pour tous vos réponses

    je vais faire tous ces modifs et je vous tiens au courants

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

Discussions similaires

  1. Réécriture et redirection pour une même page
    Par PMulE dans le forum Apache
    Réponses: 1
    Dernier message: 04/03/2013, 23h29
  2. Réponses: 10
    Dernier message: 14/03/2012, 22h20
  3. Réponses: 2
    Dernier message: 07/12/2008, 16h32
  4. pipe et redirection entrée en même temps
    Par iohack dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 27/11/2008, 20h34
  5. Réponses: 6
    Dernier message: 25/08/2007, 13h13

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