Wordpress: Redirections des anciens urls via .htaccess

Discussion dans 'URL Rewriting et .htaccess' créé par Sak, 5 Octobre 2013.

Tags:
  1. Sak
    Sak WRInaute discret
    Inscrit:
    3 Mai 2003
    Messages:
    76
    J'aime reçus:
    0
    Sous Wordpress je viens de changer la structure de mes permaliens.
    Auparavant j’avais cette structure de permalien:
    Code:
    /%year%/%monthnum%/%day%/%postname%.html
    je viens de changer la structure des permaliens pour celle-ci:
    Code:
    /%category%/%postname%-%post_id%.html
    Comment faire via .htaccess une redirection globale de mes anciennes urls vers les nouvelles ?
    J'ai tenté ceci mais ça ne marche pas:
    Code:
    RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ http://www.exemple.com/$4
    Merci d’avance.
     
  2. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    Tu ne saurais pas car tu n'as ni le %category% ni le %post_id% dans ton ancienne url.
    Il faut passer par php malheureusement, et vérifier en base de données si l'url appelée est à l'ancien format et rediriger vers le nouveau avec les bons paramètres trouvés en DB.
     
  3. Sak
    Sak WRInaute discret
    Inscrit:
    3 Mai 2003
    Messages:
    76
    J'aime reçus:
    0
    Merci pour la réponse.
    C'était pour éviter des centaines d'erreurs 404 en changeant la structure des permaliens.
    Mais je voudrais vraiment passer de la structure
    Code:
    /%year%/%monthnum%/%day%/%postname%.html
    à la structure
    Code:
    /%category%/%postname%-%post_id%.html
    .
    Quitte à rediriger manuellement url par url.
     
  4. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    En effet c'est assez embêtant pour le référencement.

    Soit tu ne changes pas tes urls.
    Soit tu les changes de manière plus intelligente de façon à pouvoir les rediriger (en ayant les paramètres nécessaires).
    Soit tu fais comme tu as demandé mais tu devras passer par php (avec vérification en base de données -> pas terrible si tu veux mon avis de solliciter la DB pour ça...)
    Soit tu le fais au cas par cas (vraiment pas dynamique ni générique) -> dans ce cas, courage :)
     
  5. Sak
    Sak WRInaute discret
    Inscrit:
    3 Mai 2003
    Messages:
    76
    J'aime reçus:
    0
    Bon j’ai trouvé tout seul à force de m'entêter. Je suis persuadé que cela va aider d’autres.
    Quand on passe de cette structure de permalinks:
    Code:
    /%year%/%monthnum%/%day%/%postname%.html
    à celui-ci:
    Code:
    /%category%/%postname%-%post_id%.html
    Voilà le code à mettre en htaccess
    Code:
    RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/]+).html$ http://site.com/$1/$4-$2.html
    $1: me donne les catégories
    $4: le titre du post
    $2: l'id du post

    Je vous remercie d'avoir essayer de m'aider c'est cool.
     
  6. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    Je dois bien avouer que j'ai du mal à croire que ce que tu dis fonctionne.

    En effet, le paramètre 1 ($1) correspond à l'année (%year%), le paramètre 2 ($2) correspond au mois (%monthnum%) et le paramètre 4 ($4) correspond au nom du post (%postname%).

    Alors soit %year% correspond à la catégorie et %monthnum% à l'ID du post (ce dont je doute fort), soit c'est complètement faux.
     
  7. Sak
    Sak WRInaute discret
    Inscrit:
    3 Mai 2003
    Messages:
    76
    J'aime reçus:
    0
  8. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    En effet. Par contre, ayant un doute que cela s'effectue bien par la simple action du saint esprit, j'ai analysé les entêtes HTTP pour visualiser les redirections qui se produisent, voici le résultat:

    J'accède à
    Réponse HTTP:
    Donc déjà, à partir d'ici, je n'ai aucune idée d'où vient cette redirection. En tout cas, elle ne figure pas dans ton htaccess, j'en déduis donc que cela se produit côté PHP (tu travailles avec quel framework ?).

    Ensuite, on est donc redirigé vers
    Réponse HTTP:
    Nouvelle redirection, cette fois-ci vers l'url que tu m'as donnée.
    En gros, je pense simplement que la règle de ton htaccess est inutile et que ton framework gère les redirections pour toi selon les changements de format des urls que tu fais. Car l'id du post (ici 4383) sort de nulle part, ainsi que d'autres paramètres.
     
  9. Sak
    Sak WRInaute discret
    Inscrit:
    3 Mai 2003
    Messages:
    76
    J'aime reçus:
    0
    Je veux bien te croire, je t'assure. Je veux comprendre aussi... Mais quand je vire le htaccess, la redirection ne marche plus et j'ai un joli erreur 404.

    4383 et l'id du post. C'est ce que je voulais avoir dans l'url de mes pages
    Code:
    /%category%/%postname%-%post_id%.html
    J'ai vérifié les en-têtes http aussi. L'ancien url redirige vers une url intermédiaire qui redirige vers le bon url... C'est bizarre.
     
  10. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    Peux-tu afficher le contenu de ton htaccess actuellement?

    En fait je suspecte fortement une redirection de toutes les urls vers l'index.php qui traite lui même la réécriture d'urls avec $_SERVER['REQUEST_URI'] (tout ceci en transparence framework).
    Donc si tu changes la structure de tes urls, ton framework gère également les redirections.
    Ce n'est qu'une hypothèse mais ça me semble plus logique qu'une redirection effective qui sort de nulle part.
     
  11. Sak
    Sak WRInaute discret
    Inscrit:
    3 Mai 2003
    Messages:
    76
    J'aime reçus:
    0
    voici le htaccess en question. C'est vraiment bizarre.

    Code:
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
    # END WordPress
    
    # Rediriger en 301 les anciens urls avec date vers les new avec categorie et post id...
    RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/]+).html$ http://www.site.org/$1/$4-$2.html
    #End...
    Par contre quand j'ai enlevé cette redirection:
    Code:
    # Rediriger en 301 les anciens urls avec date vers les new avec categorie et post id...
    RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/]+).html$ http://www.site.org/$1/$4-$2.html
    #End...
    l'url ne fait pas de redirection et produit du dupplicate content:
    Code:
    http://www.....org/2013/10/03/histoire-de-xory-xillage-xoninke-du-xiaxounou-partie-3.html
    Par contre l'url intermédiaire généré par mon htaccess bizarre:
    Code:
    http://www.site.org/2013/histoire-de-xory-xillage-xoninke-du-xiaxounou-partie-3-10.html
    Redirige directement vers la nouvelle structure cad
    Code:
    /%category%/%postname%-%post_id%.html
    C'est comme s'il y a une boucle de redirection interne...

    NB. je précise que j'utilise un système de cache WPSP
     
  12. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    Code:
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    
    Voilà qui confirme une partie de mon hypothèse. Toutes les urls (qui ne sont ni dossier, ni fichier physiquement existant) pointent sur l'index.php qui lui même va gérer le routage des urls.

    En somme, la règle que tu as ajouté (RedirectMatch) ne doit servir à rien hormis mettre le désordre un peu plus.
    N'oublie pas que ton navigateur a mis en cache la directive de redirection "fausse", ce qui peut t'empêcher de re-tester convenablement (sauf si tu t'en rends compte, c'est pour ça que je te le dis).

    Donc pour résumer, je pense bien que wordpress gère pour toi les redirections quand tu changes le format d'une url.
     
  13. Sak
    Sak WRInaute discret
    Inscrit:
    3 Mai 2003
    Messages:
    76
    J'aime reçus:
    0
    Alors pourquoi quand j'enlève le htaccess, j'ai de jolies erreurs 404 ?
    j'ai vidé le cache des navigateurs, pour préciser. Un coup il ne redirige pas l'ancien url sur le bon url /%category%/%postname%-%post_id%.html.
    Quand je vide les caches et que je remette le htaccess bizarre, toutes les redirections fonctionnent.
     
  14. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    Car je n'ai jamais dit de supprimer le htaccess mais bien la ligne "RedirectMatch" uniquement.

    Code:
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress
    
     
  15. Sak
    Sak WRInaute discret
    Inscrit:
    3 Mai 2003
    Messages:
    76
    J'aime reçus:
    0
    Désolé, je n'ai pas été très précis quand je parlais de htaccess.
    Je parlais de la ligne ci-dessous:
    Code:
    RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/]+).html$ http://www.site.org/$1/$4-$2.html
     
  16. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    En fait ton RedirectMatch agit comme ceci:

    Si j'accède à
    alors je suis redirigé vers
    Ce qui est logique par rapport à ta règle "RedirectMatch" mais pas par rapport à la logique globale. En effet, le "10" représente le mois et non l'ID.
    Par contre, on dirait que wordpress gère en interne la redirection et qu'il reconnait l'url. Car au final on est bien redirigé vers
    Honnêtement je sais pas. Pour le htaccess je dois juste te dire que ta règle n'est pas correcte logiquement parlant, même si cela donne un bon résultat. Je te conseille de regarder la documentation de wordpress au sujet des changements de format des urls et voir comment ils gèrent ça car c'est obligatoirement l'explication ici.
     
  17. Sak
    Sak WRInaute discret
    Inscrit:
    3 Mai 2003
    Messages:
    76
    J'aime reçus:
    0
    Giustino,
    Merci pour toutes tes réponses. Je suis convaincu aussi que ma règle ne devrait pas marcher. Mais elle marche.
    Je creuserai pour savoir par quelle mécanisme, wp redirige
    vers la bonne adresse.
    L'énigme se situe sur cette dernière redirection.
     
Chargement...
Similar Threads - Wordpress Redirections anciens Forum Date
Wordpress redirections et htaccess à modifier ? URL Rewriting et .htaccess 14 Janvier 2019
Migration de Presta à Wordpress - Redirections Débuter en référencement 24 Août 2015
Migration pluxml vers wordpress : redirections url Netlinking, backlinks, liens et redirections 21 Décembre 2011
Wordpress : redirections 301 "persos" ne fonctionnent pas ! URL Rewriting et .htaccess 10 Février 2011
Wordpress : quelles structure de page pour un meilleur référencement Crawl et indexation Google, sitemaps il y a 22 minutes
Silo + Wordpress : Liens et pages parentes Techniques avancées de référencement 22 Novembre 2020
WordPress Modifier les balises hn de sa homepage Wordpress Débuter en référencement 13 Novembre 2020
WordPress Transfert d'un gros site HTML 170 pages vers WordPress Crawl et indexation Google, sitemaps 9 Septembre 2020
Optimisation site Wordpress Débuter en référencement 21 Août 2020
Lien externe sponsorisé menu/page accueil Wordpress Débuter en référencement 9 Août 2020