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 confirmé
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    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
    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.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    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
    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;

  5. #5
    Membre confirmé
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    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
    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.

  7. #7
    Membre confirmé
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    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
    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]

  9. #9
    Membre confirmé
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    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
    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]

  11. #11
    Membre confirmé
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    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
    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$

  13. #13
    Membre confirmé
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    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
    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 ?

  15. #15
    Membre confirmé
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    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
    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 ?

  17. #17
    Membre confirmé
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    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
    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.

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