Redirection URL

flipflipflipflip Membre

Bonjour à tous,

J'ai mis en place un nouveau site basé sur PluXml (je donnerais le lien plus tard). C'est une migration de prestashop (usine à gaz qui était utilisé comme CMS) vers PluXml. Le problème est que je me retrouve avec une longue liste d'url en 404.

Comme l'orientation du site a changé je ne vais pas me prendre la tête à chercher une correspondance à une page existante du coups je souhaite rediriger toute les erreurs 404 vers la page d'accueil en code 301.

Le hic est que je me suis toujours cassé les dents sur le htaccess du coups je fais appelle à votre aide.

J'ai l'url http://monsite/15-un-article que je veux rediriger vers https://monsite

Merci d'avance.

J'ai un string de l'array

Mots clés:

Réponses

  • kowalskykowalsky Membre

    Je pense que ce site te sera utile :


    En ce qui me concerne, quand j'avais migré de WP vers PluXml, j'avais mis des redirections sur les principaux anciens répertoires de WP et laissé les moteurs de recherche indexer de nouveau mon site (si tu ne cours pas après le SEO).

    (les exemples sont pour wordpress, à adapter pour prestashop ; à mettre au début du fichier .htaccess)

    Redirect gone "/wp-content"

    Redirect gone "/wp-includes

    Redirect gone "/wp-admin"

    Tu peux en plus aussi éditer le fichier erreur.php de ton theme et y inserer une balise meta refresh vers ta page d'accueil


  • flipflipflipflip Membre

    Merci pour tes liens.

    Je me suis inspiré du premier et disons que j'arrive à avoir une réaction.

    Redirect 301 /15-un-article https://monsite
    # BEGIN -- Pluxml
    Options -Multiviews
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    # Réécriture des urls
    RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]
    RewriteRule ^feed\/(.*)$ feed.php?$1 [L]
    </IfModule>
    # END -- Pluxml
    

    Lorsque je charge la page http://monsite.fr/15-un-article je suis redirigé vers https://monsite.fr/?15-un-article . Il y a juste le ? qui s'ajoute et bien sûr je tombe toujours sur une erreur 404 :(

    J'ai un string de l'array

  • kowalskykowalsky Membre

    Pas sûr de comprendre : toutes tes URL prestashop commencent par 15-un article ?

    Tu peux essayer 6- Rediriger d’anciens répertoires vers de nouveaux en 301

    RewriteRule ^/?ancien_repertoire/([a-z/.]+)$ /$1 [R=301,L]

  • flipflipflipflip Membre

    Non elles ne commencent pas par 15-un-article. D'autres autres exemples :

    • http: //monsite.fr/26-gammes-produits
    • http: //monsite.fr/20-classic
    • http: //monsite.fr/19-usages

    J'ai un string de l'array

  • bazooka07bazooka07 Membre

    Apache est un peu retord à maitriser

    Quand on met un "redirect au début de .htaccess, Apache continue à interprêter la suite du fichier .htaccess et applique les régles de "mod_rewrite.c". Il faut donc ajouter une règle "RewriteRule [0-9]+ ....." pour les anciennes URLs de Prestashop :

    RedirectMatch permanent ".*/[0-9]+-[^/]+$" "/PluXml-5.7/index.php"
    
    # BEGIN -- Pluxml
    Options -Multiviews
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /PluXml-5.7/
    
    RewriteRule ^[0-9]+-.*$ index.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    # Réécriture des urls
    RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]
    RewriteRule ^feed\/(.*)$ feed.php?$1 [L]
    </IfModule>
    # END -- Pluxml
    

    Sur mon serveur virtuel PluXml est installé dans un dossier "PluXml-5.7/". Remplacer "/PluXml-5.7/" par "/" dans le cas contraire.

    Attention : SI l'url_rewriting est désactivé dans PluXml, il faudra remettre la nouvelle régle à la main.

  • bazooka07bazooka07 Membre

    On peut simplifier la 1ère ligne de .htaccess comme ceci :

    RedirectMatch permanent "^/(.*/)?[0-9]+-[^/]+$" "/$1index.php"
    


  • bazooka07bazooka07 Membre
    4 mars modifié

    En poussant les test un peu plus, la meilleure solution que je trouve est celle-ci :

    RedirectMatch permanent ".*/[0-9]+-[^/]+$" "/PluXml-5.7/index.php"
    
    # BEGIN -- Pluxml
    Options -Multiviews
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /PluXml-5.7/
    
    RewriteRule .*/[0-9]+-[^/]*$ index.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    # Réécriture des urls
    RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]
    RewriteRule ^feed\/(.*)$ feed.php?$1 [L]
    </IfModule>
    # END -- Pluxml
    

    Par sécurité, il vaut mieux spécifier clairement le dossier de PluXml

  • flipflipflipflip Membre

    Merci @bazooka07 de ton aide.

    J'ai presque le résultat souhaité mais maintenant, avec ta dernière version, je suis redirigé vers l'adresse

    monsite.fr/index.php?15-un-article
    

    De ce que j'ai compris, apache considère le 15-un-article comme la query string.

    J'ai un string de l'array

  • bazooka07bazooka07 Membre

    As-tu bien mis la règle suivante dans .htaccess ? Normalement tu ne devrais pas avoir de query.

    RewriteRule .*/[0-9]+-[^/]*$ index.php [L]
    

    Attention à l'ordre des régles. [L] signifie qu'on arrête là et qu'on ne va pas chercher les régles suivantes (L = last)

    Normalement http://monsite.fr/15-un-article doit donner http://monsite.fr/index.php avec un code 301 au lieu de 200.

    On peut le vérifier dans l'inspecteur de code de Firefox dans l'onglet réseau ( Recharger la page HTML si vide )

  • flipflipflipflip Membre

    Oui mon capitaine :)

    RedirectMatch permanent ".*/[0-9]+-[^/]+$" "/index.php"
    # BEGIN -- Pluxml
    Options -Multiviews
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    
    RewriteRule .*/[0-9]+-[^/]*$ index.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    # Réécriture des urls
    RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]
    RewriteRule ^feed\/(.*)$ feed.php?$1 [L]
    </IfModule>
    # END -- Pluxml
    

    J'ai un string de l'array

  • bazooka07bazooka07 Membre

    Effectivement il y a un bug quand PluXml est à la racine du site. Essaie ceci :

    RedirectMatch permanent ".*/[0-9]+-[^/]+$" "/index.php"
    
    # BEGIN -- Pluxml
    Options -Multiviews
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    
    RewriteRule [0-9]+-[^/]*$ index.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    # Réécriture des urls
    RewriteRule ^(?!feed)(.*)$ index.php?$1 [L]
    RewriteRule ^feed\/(.*)$ feed.php?$1 [L]
    </IfModule>
    # END -- Pluxml
    


  • flipflipflipflip Membre

    Nikel ça marche.

    Merci beaucoup.

    J'ai un string de l'array

Connectez-vous ou Inscrivez-vous pour répondre.