Redirection suite à changement de CMS + URL rewriting

Discussion dans 'URL Rewriting et .htaccess' créé par myriamrv, 5 Mai 2012.

  1. myriamrv
    myriamrv Nouveau WRInaute
    Inscrit:
    5 Mai 2012
    Messages:
    9
    J'aime reçus:
    0
    Bonjour à tous !

    Novice la matière, je viens solliciter votre aide pour la création de mon fichier .htaccess...

    Je vous explique mon cas...

    J'ai créé il y a 3 ans un site à l'aide d'un CMS, pour lequel aucune réécriture d'URL n'avait été mise en place. Malgré cela, mon site était bien positionné dans les moteurs de recherche, aussi je ne me suis jamais trop penchée sur la question.
    Mon site a donc été allègrement référencé sur la toile pendant 3 ans avec des urls du type
    index.php?mod=page&ac=page&id_page=2
    index.php?mod=news&ac=commentaires&id=174
    /index.php?mod=forum&ac=voir&id=1546
    etc etc...

    Aucun problème, jusqu'à récemment. Mon petit site prenant de l'ampleur, j'ai dû pour moult raisons changer de CMS. C'est chose faite, et le nouveau présente l'avantage d'utiliser par défaut l'URL rewriting. Je précise que le contenu (articles, forum, pages etc) a été réimporté ou recréé le cas échéant sur le nouveau CMS. Donc toute ancienne page a désormais son équivalent.

    Le hic, vous l'aurez compris, est que toutes mes anciennes URL en php dont le web regorge ne sont plus valides. Actuellement, le .htaccess de mon nouveau CMS redirige automatiquement ces adresses qu'il ne peut pas résoudre vers la page d'accueil du site, mais évidemment ça ne me convient pas... J'aimerais que ces ex-adresses renvoient vers les nouvelles pour que :
    - D'une part les visiteurs ne se sauvent pas faute d'être tombés directement sur ce qu'ils cherchaient
    - D'autre part ne pas perdre le bon positionnement dont bénéficiaient mes anciennes pages, étant donné que les nouvelles ont le même contenu.

    La solution réside donc dans une redirection au niveau du .htaccess et c'est là que les ennuis commencent... Les tutos ne manquent pas sur le net pour créer des redirections 301 ou mettre en place des réécritures d'URL. J'ai réussi à faire l'un et l'autre sur des petits fichiers de tests mais je n'arrive pas à combiner le tout avec mon .htaccess existant, je me prends des erreurs 500 à chaque tentative, sans doute à cause de la redirection déjà existante qui renvoie les URLs inconnues vers la page d'accueil.

    Je vous colle le contenu de mon .htaccess actuel :
    Code:
    <IfModule mod_rewrite.c>
      Options +FollowSymLinks
      RewriteEngine On
    
      # Get rid of index.php
      RewriteCond %{REQUEST_URI} /index\.php
      RewriteRule (.*) index.php?rewrite=2 [L,QSA]
    
      # Rewrite all directory-looking urls
      RewriteCond %{REQUEST_URI} /$
      RewriteRule (.*) index.php?rewrite=1 [L,QSA]
    
      # Try to route missing files
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} public\/ [OR]
      RewriteCond %{REQUEST_FILENAME} \.(jpg|gif|png|ico|flv|htm|html|php|css|js)$
      RewriteRule . - [L]
      
      # If the file doesn't exist, rewrite to index
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ index.php?rewrite=1 [L,QSA]
    
    </IfModule>
    
    # sends requests /index.php/path/to/module/ to "index.php"
    # AcceptPathInfo On
    
    # @todo This may not be effective in some cases
    FileETag Size
    
    Voici quelques exemples de redirections que je souhaite faire :
    Renvoi de /index.php?mod=news&ac=commentaires&id=367
    vers /articles/367

    Renvoi de index.php?mod=forum&ac=voir&id=4823
    vers /forums/topic/4823

    Renvoi de index.php?mod=page&ac=page&id_page=2
    vers /pages/horoscope

    Un grand merci à qui pourra m'aider à trouver la solution !

    Myriam
     
  2. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 889
    J'aime reçus:
    75
    J'ai été dans le même cas il y a peu et j'ai opté pour une solution en PHP + SQL :

    -> Tu crées une table qui contient, pour chaque enregistrement, l'ancienne url et la nouvelle url correspondante
    -> Tu inclus en amont de tes pages un script PHP qui va vérifier si la page appelée n'est pas une ancienne url, si oui tu rediriges

    Et tu vires ta redirection automatique qui est dans le .htaccess.
     
  3. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    C'est pas con comme idée (même si ça doit pomper)
     
  4. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 889
    J'aime reçus:
    75
    C'était ça a ou charger le .htaccess avec plus de 2000 redirections...
     
  5. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    genre quand apache a fini de parser le htaccess, le visiteur est sorti du site :D
     
  6. myriamrv
    myriamrv Nouveau WRInaute
    Inscrit:
    5 Mai 2012
    Messages:
    9
    J'aime reçus:
    0
    Merci de ta réponse rapide !

    Pour la création de la table, ça devrait aller. Ca doit représenter au bas mot 6 ou 7000 URLs, mais je vais essayer d'automatiser le truc avec un fichier php avec des boucles pour tous les articles, puis tous les posts du forum etc...

    Pour le code PHP, je suis assez novice aussi... J'ai appris "sur le tas", en gros je sais insérer dans une base SQL, récupérer du contenu dedans, l'afficher sur une page, et manipuler les conditions.

    En gros, si j'ai bien compris, il faut que :
    1/ je repère un fichier de mon CMS qui est appelé systématiquement appelé à chaque page (que je devrais identifier car il contient les balises <html><head>, probablement dans un echo
    2/ je colle au tout début de celui-ci un code qui
    - vérifie si l'adresse appelée est dans ma table d'adresses à rediriger
    - si oui, redirige à l'aide d'un code du genre :
    Code:
    header("Status: 301 Moved Permanently", false, 301);
    header("Location: MA-NOUVELLE-URL-RECUPEREE-DANS-LA-TABLE");
    exit();
    - si non, je ne fais rien et affiche ma page normalement
    C'est bien ça ?

    Autre question, comme je l'ai dit il y a un sacré paquet d'URLs à rediriger. Est-ce que le fait d'exécuter ce script à chaque chargement de page ne risque pas de ralentir sensiblement le chargement des pages ?
     
  7. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    Regarde du côté de index.php
    Oui mais par forcement beaucoup

    Ensuite une solution htaccess pur est possible mais c'est très dépendant des tes anciennes et nouvelles url.
    Le problème des redirection 301 ancienne/nouvelle page, est en général à traiter avant de migrer.
     
  8. myriamrv
    myriamrv Nouveau WRInaute
    Inscrit:
    5 Mai 2012
    Messages:
    9
    J'aime reçus:
    0
    Oui déjà fait mais ce CMS est hyper complexe (SocialEngine, si tu connais)

    Vlà le index.php qui est à la racine à titre indicatif :
    Sinon zeb, simple curiosité, tu me conseillais de faire quoi exactement avant de migrer, pour anticiper le problème ?
     
  9. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    Dans un tel cas de changement de CMS j'essaie de conserver les anciennes URL (du coup 0 problème). Mais j'ai pas de paramètres dans mes url sauf si ça tombe sur un formulaire (question de principe).

    Comme dans ton cas elles étaient "minables", j'aurais commencé par faire une liste complète pour isoler la structure histoire de voir si des règles simples me permettrait de gérer les urls par paquets
    Ensuite j'aurais construit mes nouvelles urls et mis en place une redirection htaccess (traiter le cas en amont permet souvent de créer des nouvelles url propices a des réécritures simples et groupées).

    index.php?mod=page&ac=page&id_page=2
    index.php?mod=news&ac=commentaires&id=174
    index.php?mod=forum&ac=voir&id=1546

    pourrait peut être se traiter dans le genre :

    http://www.example.com/page/
    http://www.example.com/news/
    http://www.example.com/forum/

    etc ...
    le souci est de savoir si une telle structuration est possible.

    Maintenant si tel n'est pas le cas chez toi (genre ancienne url comme tu donne et nouvelles déjà fixées) la solution d'une table de transcodage semble la plus simple (pour le volume que tu indique).
    Après savoir si il faut la faire en php/SQL ou en php pur (genre structure switch / case) c'est juste une histoire de performance.
     
  10. myriamrv
    myriamrv Nouveau WRInaute
    Inscrit:
    5 Mai 2012
    Messages:
    9
    J'aime reçus:
    0
    En ce qui concerne la structure des URLs, l'ancien contenu ayant été réimporté, il y a effectivement une cohérence entre les anciennes et les nouvelles, au moins pour les posts du forum et les articles, ce qui représente un bon 99% des pages à rediriger. De ce fait on peut facilement déduire la nouvelle URL d'après l'ancienne, malgré le changement de CMS (tous les posts et articles ont le même id dans la base).

    Par exemple, pour l'article n°351, on avait :
    index.php?mod=news&ac=commentaires&id=351
    on a maintenant /articles/351
    Et cette structure est valable pour tous les articles.

    Il n'y a pas un moyen plus simple d'automatiser ça dans le .htaccess, en passant en l'occurrence le n°d'article comme une variable ? ? Par exemple, j'ai tenté d'ajouter ça à mon fichier :
    Code:
    redirectmatch 301 index.php?mod=news&ac=commentaires&id=([0-9]+) http://www.nailissima.fr/articles/$1
    
    mais ça ne fonctionne pas. Pas d'erreur 500, mais l'ancienne adresse me renvoie toujours sur l'index et pas sur l'article correspondant...

    Pour le moment j'ai pas mal cherché mais impossible de trouver où coller mon script php... Autant avec mon ancien CMS j'avais aucun problème pour m'y retrouver dans les fichiers, autant SocialEngine est d'une complexité sans nom (pour mon niveau en tout cas)...
     
  11. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    Tu devrais plutôt utiliser le tandem RewriteCond / RewriteRule pour ton forumv "redirectmatch" je connais pas.
    Il y a un bon tuto ici dans les dossier sur la réécriture d'url tu devrais t'en inspirer.

    Ensuite si tu couvre 99% des urls avec ça il faut regarder a faire des redirections permanentes sur le reste tjs dans le htaccess si le nombre deviens "gérable". A ce stade tu n'aurais pas a intervenir dans tes scripts.
     
  12. myriamrv
    myriamrv Nouveau WRInaute
    Inscrit:
    5 Mai 2012
    Messages:
    9
    J'aime reçus:
    0
    J'ai bien tenté avec les RewriteRule / RewriteCond, c'est même la 1ère chose que j'ai faite, mais cela ne fonctionne pas. Même en mettant en commentaire tout le reste du fichier .htaccess, (du coup les 3/4 des liens et menus du site ne fonctionnent plus) et bien les anciennes pages continuent de renvoyer vers la page d'accueil et non vers leur homologue. J'arrive pas à comprendre il y a sans doute un truc qui m'échappe mais quoi ?
     
  13. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    Faut voir le code pour ça. les règles de réécritures sont ultra chiantes (pour moi) a gérer mais il y a toujours une réponse a un dysfonctionnement.
     
  14. myriamrv
    myriamrv Nouveau WRInaute
    Inscrit:
    5 Mai 2012
    Messages:
    9
    J'aime reçus:
    0
    Oui, il y a certainement quelque chose dans le code, ailleurs que dans le .htaccess et qui prévaut sur celui-ci...

    J'ai posté dans un forum spécialement dédié à SocialeEgine, mais on me répond juste que c'est pas possible (http://www.socialengineforum.com/in...ges-using-htaccess/page__p__98837&#entry98837) Ca m'plaît tiens...

    Je reste convaincue que tout code est modifiable, et heureusement c'est pas parce qu'on sait pas faire que c'est impossible!

    J'ai aussi envoyé un mail au support de Socialengine, pas encore de réponse.

    En creusant un peu, il semble que les URLs du CMS soient gérées par ZEND, mais je sais même pas comment ça marche et à quoi ça sert. Je continue à fouiller dans les fichiers en attendant, si je trouve quelque chose je vous dirai !

    Merci pour l'aide en attendant
     
  15. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 190
    J'aime reçus:
    1
    J'en doute car le fichier "htaccess" est géré par un processus apache donc en amont logiquement de toute couche php (ou zend)
    Passe moi deux trois url anciennes avec équivalent "nouveau cms" par MP et aussi ton fichier htaccess. Si tu veux je regarderais a quoi ça ressemble et pourrait faire quelques test sur un domaine a moi pour voir.
     
  16. myriamrv
    myriamrv Nouveau WRInaute
    Inscrit:
    5 Mai 2012
    Messages:
    9
    J'aime reçus:
    0
    C'est sympa de ta part, je t'envoie ça...

    Je sais que ça paraît improbable, mais c'est tout de même bizarre qu'en mettant en commentaire la totalité des lignes du htaccess, il y ait toujours ces satanées redirections vers la page d'accueil, et que celui-ci ignore royalement toute règle de rewriting ou de redirection que je lui ajoute...

    Enfin je ne fais qu'émettre des suppositions, j'ai bien trouvé le dossier contenant zend sur mon ftp, j'ai édité tous les fichiers, mais rien trouvé qui ressemble à des règles de rewriting à la suite desquelles j'aurais pu ajouter les miennes.
     
Chargement...
Similar Threads - Redirection suite changement Forum Date
redirection suite au changement d'URL ? Netlinking, backlinks, liens et redirections 18 Mai 2017
Redirection 301 suite a un changement de Ndd sur PS Débuter en référencement 27 Avril 2016
Redirection wordpress suite à changement de permalien Débuter en référencement 3 Novembre 2014
Redirection suite à changement de plateforme Joomla -> WP Netlinking, backlinks, liens et redirections 10 Mai 2013
Redirection permanente d'un site suite changement ndd URL Rewriting et .htaccess 17 Mars 2010
Problème suite à redirection 301 URL Rewriting et .htaccess 4 Novembre 2019
Problème de redirection suite désinstallation amp Débuter en référencement 27 Septembre 2019
Redirection suite à refonte + SEO Netlinking, backlinks, liens et redirections 21 Juillet 2017
Redirection suite à passage en https Netlinking, backlinks, liens et redirections 1 Avril 2017
Help: Problème de Redirection .htaccess suite erreur noms de pages Netlinking, backlinks, liens et redirections 6 Septembre 2015