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 :

[.htaccess] Redirection permanente pour les accès directs aux URL réécrites


Sujet :

Apache

  1. #1
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut [.htaccess] Redirection permanente pour les accès directs aux URL réécrites
    Bonjour,

    Je viens de passer en url rewriting qui est le suivant et qui marche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^ma-page.html$ /index.php?m=2 [L]
    Je souhaite faire une redirection permanente 301 des anciennes pages vers les nouvelles, soit index.php?m=2 vers ma-page.html

    J'ai essayé avec RedirectPermanent, RedirectMatch permanent et RewriteCond + RewriteRule mais ça ne marche pas. Soit la redirection n'est pas prise en compte, soit ma-page.html n'est pas trouvée. Voici ce que j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RedirectPermanent /index.php?m=2 http://www.mon-site.com/ma-page.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RedirectMatch permanent ^index.php?m=2$ http://www.mon-site.com/ma-page.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{QUERY_STRING} ^m=2$
    RewriteRule ^index\.php$ /ma-page.html [R=301,L]
    Merci pour votre aide.

  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
    Pas possible directement comme ça, faut bidouiller. La problématique générale est de d'identifier quand les appels aux URL réécrites sont faits en directs ou suite à une réécriture. Il y a 2 versions possibles : une avec les variables d'environnement et une en utilisant un paramètre d'URL spécial. Va voir cette réponse.

    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 habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    Je n'obtiens pas le status 301 (vérifié avec web-sniffer.net) et l'adresse ne change pas dans la barre d'adresse.

  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
    Un peu de détails sur ce que tu as fait, peut-être ? Genre tout ton .htaccess et les URL que tu utilises pour tester;

    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 habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    Voici ce que j'ai mis dans le htaccess :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteCond %{QUERY_STRING} !internal_redirect=1
    RewriteCond %{QUERY_STRING} m=209
    RewriteRule /index.php /code-reduction.html [R=301,L]
    RewriteRule ^code-reduction.html$ /index.php?m=209&internal_redirect=1 [L]

  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
    Citation Envoyé par _Mac_ Voir le message
    Un peu de détails sur ce que tu as fait, peut-être ? Genre tout ton .htaccess et les URL que tu utilises pour tester;
    Indique aussi le résultat obtenu et attendu pour chaque URL.

    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 habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    Voici 2 URL : la nouvelle et l'ancienne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    http://www.un-max-de-concours.com/code-reduction.html
    http://www.un-max-de-concours.com/index.php?m=209

  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
    OK, j'ai vu le problème : il y a un / en trop devant index.php dans le premier RewriteRule. Retire-le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteCond %{QUERY_STRING} !internal_redirect=1
    RewriteCond %{QUERY_STRING} m=209
    RewriteRule index.php /code-reduction.html [R=301,L]
    RewriteRule ^code-reduction.html$ /index.php?m=209&internal_redirect=1 [L]

    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 habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    J'ai bien une redirection 301.
    L'ancienne URL passe à la nouvelle.
    Par contre, le paramètre ?m=209 s'affiche à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.un-max-de-concours.com/code-reduction.html?m=209

  10. #10
    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
    Ajoute un ? à la fin de l'URL de redirection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule index.php /code-reduction.html? [R=301,L]

    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

  11. #11
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    Ca marche, le paramètre ne s'affiche plus.
    Par contre un autre problème apparaît pour les pages avec 2 paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^code-promo-([-A-Za-z]*)-([-0-9]+)\.html$  /index.php?m=209&t=$2 [L]
    Je reviens toujours sur la même page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.un-max-de-concours.com/code-reduction.html

  12. #12
    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
    Un peu logique : tu rediriges selon la condition suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{QUERY_STRING} m=209
    qui dit juste "si la query string contient la chaîne de caractères 'm=209'", ce qui est le cas de la query string m=209&t=... Il faut donc rendre le filtre plus restrictif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{QUERY_STRING} ^m=209$

    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

  13. #13
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    Ca marche. Merci.

    Si j'ai bien compris, pas besoin de répéter à chaque fois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{QUERY_STRING} !internal_redirect=1
    J'ajoute juste ceci pour une nouvelle redirection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{QUERY_STRING} ^m=255$
    RewriteRule index.php /code-reduction.html? [R=301,L]
    Mais si j'ai 2 paramètres, comment je récupère les paramètres ?
    Redirection basée sur cette réécriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^code-reduction-([-A-Za-z0-9]*)-([0-9]+)\.html$ /index.php?m=255&c=$2 [L]
    Est-ce que je dois rediriger les anciennes URL une par une?

  14. #14
    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 SebCBien Voir le message
    Mais si j'ai 2 paramètres, comment je récupère les paramètres ?
    Redirection basée sur cette réécriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^code-reduction-([-A-Za-z0-9]*)-([0-9]+)\.html$ /index.php?m=255&c=$2 [L]
    Est-ce que je dois rediriger les anciennes URL une par une?
    Pas compris. Tu peux donner un exemple ?

    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

  15. #15
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    J'ai fais des redirections avec 1 paramètre.
    Mais j'ai aussi des redirections avec 2 paramètres.

  16. #16
    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 ne nous as donné que la moitié du problème : comment construire les URL de redirection en code-reduction-([-A-Za-z0-9]*)-([0-9]+)\.html ? Pour ce genre d'URL, pourquoi ne pas reprendre le truc du RewriteCond %{QUERY_STRING} !internal_redirect=1 ?

    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

  17. #17
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    Pour plusieurs URL à rediriger je peux faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    RewriteCond %{QUERY_STRING} !internal_redirect=1
    RewriteCond %{QUERY_STRING} ^m=209$
    RewriteRule index.php /code-reduction.html? [R=301,L]
    RewriteCond %{QUERY_STRING} ^m=255$
    RewriteRule index.php /code-reduction-bis.html? [R=301,L]
    RewriteCond %{QUERY_STRING} ^m=209&t=2-25$
    RewriteRule index.php /code-reduction-autre.html? [R=301,L]
    Quelle est la limite au nombre de redirection ?

  18. #18
    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
    "Nombre de redirections" dans quel sens ? Le nombre de règles que tu peux mettre dans un .htaccess ou le nombre de redirection successives qu'un navigateur peut accepter avant de péter les plombs ? Si c'est pour le .htaccess, aucune idée. Je ne pense pas qu'il y ait une limite.

    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

Discussions similaires

  1. [AC-2003] Interdire l'accès direct aux tables mais pas via les formulaires
    Par Aegnor dans le forum Sécurité
    Réponses: 2
    Dernier message: 27/09/2011, 10h22
  2. Réponses: 4
    Dernier message: 07/06/2008, 21h07
  3. Gérer l'acces direct aux tables suivant les utilisateurs
    Par kristof33 dans le forum Sécurité
    Réponses: 2
    Dernier message: 02/03/2007, 08h11
  4. htaccess : interdire l'accès direct aux fichiers php
    Par Cédricss dans le forum Apache
    Réponses: 5
    Dernier message: 08/10/2006, 11h29

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