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 301 et .htaccess [Fait]


Sujet :

Apache

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 30
    Points
    30
    Par défaut Redirection 301 et .htaccess
    Bonjour,

    J'ai réécris dernièrement deux urls et j'aimerais effectuer une redirection 301 des anciennes pages vers les nouvelles, mais en lisant certains tutoriels en ligne je n'arrive pas à comprendre comment m'y prendre.

    Voici ce que j'ai dans mon .htaccess concernant les urls en question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule ^tags/([0-9]+)/([0-9a-zA-Z-]+)\.html$ index.php?page=tag&t=$2&p=$1 [L]
    RewriteRule ^auteur/([0-9]+)/(.*)\.html$ index.php?page=author&author_name=$2&p=$1 [L]
    Pouvez vous m'aider SVP ?

    Merci d'avance.

    EDIT:
    Je viens d'essayer cette expression mais ça me renvois une erreur 500:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule ^index.php?page=tag&t=([0-9a-zA-Z-]+)&p=([0-9]+) 
    tags/$2/$1.html [R=301]
    J'ai suivi ce tutoriel, du moins ce que j'ai pu comprendre mais ça ne fonctionne pas:
    http://www.lejournaldublog.com/comme...direction-301/

  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
    Y a déjà eu une question du même genre, je crois sur le forum : ici

    Vu que comme ça, mod_rewrite ne sait pas faire la différence entre une réécriture interne (de /tags/... vers index.php) et un accès direct à l'URL index.php, l'idée c'est d'ajouter un paramètre d'URL supplémentaire quand tu fais la réécriture que tu donnes (de /tags/... vers index.php) pour marquer les bonnes redirections vers index.php faites en interne, puis d'ajouter une condition pour faire la réécriture que si ce paramètre d'URL n'existe pas.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 30
    Points
    30
    Par défaut
    Merci pour ta réponse. Même si je n'ai pas bien compris ce que je dois faire.
    En fait je voudrais faire comme sur ce site :
    http://www.lejournaldublog.com/comme...direction-301/
    càd:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule ^article-([0-9]*).php
     archives-$1.htm [R=301]
    Moi j'ai fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule ^index.php?page=tag&t=([0-9a-zA-Z-]+)&p=([0-9]+) 
    tags/$2/$1.html [R=301]
    Mais ça me fais une erreur 500 !!

  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
    Tu ne peux pas travailler directement sur la query string dans un rewrite rule, il faut faire un truc avant. Cf. cette discussion.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 30
    Points
    30
    Par défaut
    Désolé de te décevoir mais je n'y comprend pas grand chose c'est trop vague comme explication, j'ai trouvé ce tutoriel qui parle aussi de ce que je veux faire mais encore une fois je n'y comprends rien:
    http://www.apache-mod-rewrite.fr/redirection-301

    Pourrait-tu m'aider à écrire cette redirection 301?

    Sincèrement, j'ai essayé mais hélas en vain.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 30
    Points
    30
    Par défaut
    Bon j'y suis presque, en fait quand je fais ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule (.*) $1///%{QUERY_STRING} [C]
    RewriteRule ^index.php///page=tag&t=([0-9a-zA-Z-]+)&p=([0-9]+)$ tags/$2/$1.html [R=301,L]
    Et que je visite la page index?page=tag&t=formation&p=1

    Je suis renvoyé vers la page :
    h**p://www.articlesenligne.com/srv/www/htdocs/web68/html/tags/1/formation.html?page=tag&t=formation&p=1

  7. #7
    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
    Essaie d'ajouter un / devant tags, pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^index.php///page=tag&t=([0-9a-zA-Z-]+)&p=([0-9]+)$ /tags/$2/$1.html [R=301,L]
    Si ça ne marche pas, reconstruit l'URL absolue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^index.php///page=tag&t=([0-9a-zA-Z-]+)&p=([0-9]+)$ http://%{HTTP_HOST}/tags/$2/$1.html [R=301,L]

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 30
    Points
    30
    Par défaut
    Les deux expressions renvoient vers cette page:

    h**p://www.articlesenligne.com/tags/1/formation.html?page=tag&t=formation&p=1

    Sinon quand je tente d'acceder à une autre page de mon site j'ai une erreur 500.

    En fait c'est bien un [R=301,L] qui doit être à la fin de l'expression ?

  9. #9
    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
    Oui, c'est bien ce qu'il faut à la fin.

    Pour que ça marche, il faut sortir la fameuse gruge du ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^index.php///page=tag&t=([0-9a-zA-Z-]+)&p=([0-9]+)$ /tags/$2/$1.html? [R=301,L]

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 30
    Points
    30
    Par défaut
    Ca fonctionne bien pour la redirection, mais malheureusement j'ai toujours l'erreur 500. voila tout mon .htacces au cas où il y aurait un conflit entre deux expression:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    # -FrontPage-
     
    IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*
     
    RewriteEngine on
    RewriteRule ^category(.*).html$ index.php?page=category&category_id=$1 [L]
    RewriteRule ^article(.*).html$ index.php?page=article&article_id=$1 [L]
    RewriteRule ^tags/([0-9]+)/([0-9a-zA-Z-]+)\.html$ index.php?page=tag&t=$2&p=$1 [L]
    RewriteRule ^auteur/([0-9]+)/(.*)\.html$ index.php?page=author&author_name=$2&p=$1 [L]
    RewriteRule ^(.*).html$ index.php?pagedb=$1 [L]
    RewriteRule ^index.html$ index.php
     
    RewriteRule (.*) $1///%{QUERY_STRING} [C]
    RewriteRule ^index.php///page=tag&t=([0-9a-zA-Z-]+)&p=([0-9]+)$ /tags/$2/$1.html? [R=301,L]
     
    <Limit GET POST>
    order deny,allow
    deny from all
    allow from all
    </Limit>
    <Limit PUT DELETE>
    order deny,allow
    deny from all
    </Limit>
     
    ErrorDocument 404 /error404.php
    ErrorDocument 403 /error404.php
    ErrorDocument 401 /error404.php
    ErrorDocument 500 /error404.php

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu peux nous donner un exemple d'URL qui donne cette erreur 500 ?

    Ca doit partir en boucle à cause de la règle suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^tags/([0-9]+)/([0-9a-zA-Z-]+)\.html$ index.php?page=tag&t=$2&p=$1 [L]
    Tu arrives avec l'URL index.php?..., tu es redirigé sur /tags/.../...html (jusqu'ici, tout va bien), mais du coup, cette URL active la règle sus-citée : hop, tu repars sur la réécriture de index.php, etc.

    Faut bidouiller pour sortir de la boucle. Modifie tes règles comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^tags/([0-9]+)/([0-9a-zA-Z-]+)\.html$ index.php?page=tag&t=$2&p=$1&internal_redirect=1 [L]
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteCond %{QUERY_STRING} !internal_redirect=1
    RewriteRule (.*) $1///%{QUERY_STRING} [C]
    RewriteRule ^index.php///page=tag&t=([0-9a-zA-Z-]+)&p=([0-9]+)$ /tags/$2/$1.html? [R=301,L]

  12. #12
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 30
    Points
    30
    Par défaut
    J'y suis presque, grâce à un autre internaute nous sommes arrivés à faire fonctionner la première redirection (celle de la page tag), en écrivant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteCond %{QUERY_STRING} ^page=tag&t=([0-9a-zA-Z-]+)&p=([0-9]+)$
    RewriteRule ^index\.php$ /tags/%2/%1.html? [R=301,L]
     
    RewriteRule ^tags/([0-9]+)/([0-9a-zA-Z-]+)\.html$ /index.php?page=tag&t=$2&p=$1&stop [L]
    RewriteRule ^auteur/([0-9]+)/(.*)\.html$ /index.php?page=author&author_name=$2&p=$1&stop [L]
    Mais quand j'ajoute la page "author" rien ne fonctionne plus, voila ce que je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    RewriteCond %{QUERY_STRING} ^page=tag&t=([0-9a-zA-Z-]+)&p=([0-9]+)$
    RewriteRule ^index\.php$ /tags/%2/%1.html? [R=301,L]
     
    RewriteCond %{QUERY_STRING} ^page=author&author_name=(.*)&p=([0-9]+)$
    RewriteRule ^index\.php$ /auteur/%2/%1.html? [R=301,L]
     
    RewriteRule ^tags/([0-9]+)/([0-9a-zA-Z-]+)\.html$ /index.php?page=tag&t=$2&p=$1&stop [L]
    RewriteRule ^auteur/([0-9]+)/(.*)\.html$ /index.php?page=author&author_name=$2&p=$1&stop [L] 
     
    RewriteRule ^(.*).html$ index.php?pagedb=$1 [L]
    RewriteRule ^index.html$ index.php

    Une idée ?
    En tout cas merci beaucoup pour ton aide, grâce à toi j'y suis presque

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    Ben
    Citation Envoyé par Développeur
    Ca marche très bien sur mon poste
    Tes règles sont correctes. Tu as vidé le cache de ton navigateur ?

Discussions similaires

  1. Redirection 301 en .htaccess
    Par lelectronique.com dans le forum Apache
    Réponses: 8
    Dernier message: 17/01/2013, 08h58
  2. [.htaccess] Redirection 301, framework cakephp
    Par Blinkers dans le forum Apache
    Réponses: 3
    Dernier message: 19/03/2012, 11h54
  3. Réponses: 10
    Dernier message: 06/11/2011, 00h20
  4. htaccess et redirection 301
    Par petitours dans le forum Langages serveur
    Réponses: 0
    Dernier message: 14/04/2011, 21h28
  5. redirection 301 (htaccess)
    Par DevStage dans le forum Autres langages pour le Web
    Réponses: 0
    Dernier message: 05/01/2010, 18h21

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