web-dev-qa-db-fra.com

Création de 301 redirections pour les URL de publication, page, catégorie et image?

Je crains que ce ne soit trop demander ici, alors si oui, n'hésitez pas à me parler d'un autre endroit pour apprendre.

Aide avec les redirections

Je nettoie un site mal développé et migre un fichier wordpress depuis un sous-répertoire. J'ai passé des heures à essayer de comprendre la logistique des redirections et des regex. Je pense que je comprends bien, mais j'aimerais vraiment avoir la confirmation que je le fais bien et tout conseil sur les meilleures pratiques. Si quelqu'un connaît de bons tutoriels avec des exemples pratiques, je l'apprécierais aussi.

Si quelqu'un connait vraiment de simples plugins pour cela, je vous en serais extrêmement reconnaissant. Je suis en train de regarder le plugin Redirections, mais je le trouve très déroutant (mal de tête!). Dans tous les cas, mes idées ci-dessous (les sources sont suivies de => then target) sont ce que j'ai rassemblé dans les instructions de Redirections, des captures d'écran et d'autres tutoriels que j'ai parcourus. Je suis à peu près sûr qu'ils seraient applicables, que je les mette directement dans le fichier .htaccess ou utilise Redirections ou un autre plugin.

Alors, voici ce que j'essaie d'accomplir et comment je pense que cela doit être fait:

  1. Pour déplacer Wordpress du sous-répertoire vers la racine:

    /wp /(.*) => /$1
    
  2. Pour toutes les pages figurant actuellement dans les sous-répertoires de la racine, je souhaite supprimer et/ou combiner plusieurs pages sur une page de niveau supérieur:

    /products-directory /(.*) =>/products-top-level-page 
     
    /about-directory /(.*) =>/about-top- level-page 
     
    /services-directory /(.*) =>/services-top-level-page 
    
  3. Pour un ensemble de pages de premier niveau correspondant à un modèle spécifique, je souhaite les diriger vers des catégories spécifiques, par exemple. les noms de fichiers commencent tous par les mêmes deux mots comme celui-ci: same-Word-variation-variation.html et je veux qu'ils conservent leurs noms de fichiers existants - si je mets mes liens permanents de manière à se terminer par `.html`, cela fonctionnera , Je crois:

    /same-Word (. *) => /newcategory/$1
    

    Comment pourrais-je créer la règle si mes permaliens ne se terminant pas par .html? (Je pense avoir vu! Est le caractère "pas", mais je ne sais pas comment l'utiliser ici - est-ce)

    /same-Word (. *) => /newcategory/$1!\.html
    
  4. Et puis, une fois les pages spécifiques identifiées et redirigées comme ci-dessus, je supprime tout le reste (ordures) et souhaite envoyer les utilisateurs à la page d'accueil (ou peut-être une publication aléatoire?).

    Donc, 2 questions ici:

    1. Comment créer la règle qui dit "pour tout sauf les fichiers déjà redirigés comme ci-dessus, faites ceci"

    2. Comment pourrais-je empêcher cette règle de s'appliquer aux nouvelles pages et aux publications que je crée à partir de maintenant?

    Une idée est que, en supprimant, une page 404 ne serait pas trouvée, je devrais donc créer la règle pour la page 404 elle-même? Est-ce ce que je veux faire?

    Comme je l'ai dit, le site a été mal développé (le client demande aux personnes de simplement "afficher une page" sans se soucier de l'architecture appropriée, du référencement, etc.) - il n'a pratiquement aucun classement ni lien externe/retour. mais je veux comprendre la meilleure approche du point de vue du référencement et du développement.

  5. De plus, dois-je déplacer des images existantes, etc., dans le répertoire wp-content ou les laisser dans leurs sous-répertoires existants? Mon penchant est vraiment de faire un "balai-blanc" - se débarrasser de tout ce qui semble désordonné, mais je ne suis pas sûr que cela représenterait plus de travail que ça en valait la peine…

Merci d'avance pour toute orientation.

5
CJN

Bonjour @CJN: ,

Votre première question, le déplacement du répertoire WordPress est traité différemment des autres.

Déplacement de WordPress du sous-répertoire vers la racine:

Allez dans /wp-config.php et ajoutez ce qui suit pour définir (en utilisant le domaine de votre client au lieu de example.com bien sûr):

define('WP_SITEURL', 'http://example.com');
define('WP_HOME',    WP_SITEURL);

301 Redirections utilisant template_loader et wp_safe_redirect()

Vous pouvez résoudre la plupart des questions restantes en modifiant .htaccess comme suit: @ Kau-Boy montre comment, ou vous pouvez simplement le faire dans PHP . WordPress possède un point d'ancrage template_redirect que vous pouvez utiliser à cet effet, ainsi que la fonction wp_safe_redirect() pour rediriger avec un code d'état 301 HTTP. Comme vous pouvez le constater, le reste n'est que brute pour le code PHP et un peu de magie d'expression régulière parsemée. Vous pouvez mettre ce code pratiquement n'importe où dans le fichier functions.php de votre thème:

add_action('template_redirect','my_template_redirect');
function my_template_redirect() {
  $redirect_to = false;
  list($url_path,$params) = explode('?',$_SERVER['REQUEST_URI']);
  $path_parts = explode('/',trim($url_path,'/'));
  switch ($path_parts[0]) {
    case 'products-directory':
      $redirect_to = '/products-top-level-page';
      break;
    case 'about-directory':
      $redirect_to = '/about-top-level-page';
      break;
    case 'services-directory':
      $redirect_to = '/services-top-level-page';
      break;
    default:
      if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
        $category = str_replace('.html','',$match[1]);
        $redirect_to = "/newcategory/{$category}";
      } else {
        // Do whatever else you need here
      }
  }
  if ($redirect_to) {
    wp_safe_redirect($redirect_to,301);
    exit();
  }
}

Considérez la convivialité et pas seulement le référencement?

Je voudrais demander si vous voulez vraiment faire # 2? OMI qui rend un site beaucoup moins utilisable pour les utilisateurs que celui optimisé uniquement pour le référencement perçu (et en tant que fondateur et co-organisateur unique de ce groupe je ne suis pas un néophyte SEO.) voyez plutôt que vous venez de déposer le "-directory" du premier segment du chemin de l'URL. JMTCW quand même.

Générer 404 pages?

Si vous devez émettre un 404, vous pouvez le faire avec en-tête:

header("HTTP/1.0 404 Not Found");
exit;

Cependant, je pense que ce n'est pas ce que vous voulez faire, n'est-ce pas? Je pense que vous pouvez obtenir la logique de redirection dont vous avez besoin en modifiant la fonction PHP ci-dessus et en répondant à la requête HTTP avec un 301, n'est-ce pas?

Importation d'images dans la médiathèque et redirection 301

Vous pouvez les transférer dans la médiathèque, ce qui vous permettrait de les gérer à l'avenir. Voici un plugin qui pourrait aider (même si je ne suis pas sûr qu'il fonctionne avec la version 3.0; sinon, ce pourrait être une bonne base de code avec laquelle travailler de toute façon):

URL de l'image codée en dur 301 Redirections à l'aide d'un tableau

Puis, puisque ce serait chose unique vous pourriez simplement coder en dur vos URL d’image dans un tableau et les utiliser pour faire correspondre votre fonction de redirection. La modification de la valeur par défaut dans l'instruction switch à partir du code ci-dessus pourrait ressembler à ceci:

default:
  if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
    $category = str_replace('.html','',$match[1]);
    $redirect_to = "/newcategory/{$category}";
  } else {
    $images = array(
      '/images/image1.jpg' => '/wp-content/uploads/2010/08/image1.jpg',
      '/images/image2.jpg' => '/wp-content/uploads/2010/08/image2.jpg',
      '/images/image3.jpg' => '/wp-content/uploads/2010/08/image3.jpg',
      );
    if (in_array($url_path,$images)) {
      $redirect_to = $images[$url_path];
    } else  {
      // Do whatever else you need here
    }
  }

Utilisation de preg_match() vers 301 Redirect Images by URL Pattern

Bien sûr, si vos URL d’image suivent un modèle, vous pouvez rationaliser une grande partie ou la totalité du tableau d’images en utilisant plutôt un preg_match(), comme ceci:

if (preg_match('#^/images/(.*)$#',$url_path,$match)) {
  $redirect_to = "/wp-content/uploads/2010/08/{$match[1]}";
}

J'espère que cela t'aides?

8
MikeSchinkel

Il existe un plugin pour passer d’une structure permanente à une autre, mais je suis tout à fait sûr que cela ne suffira pas à vos besoins. Vous devrez utiliser des règles de réécriture en .htaccess. J'essaie de vous donner quelques exemples pour votre besoin (je ne sais pas s'ils sont tous corrects). Incluez toutes ces lignes dans un fichier nommé ".htaccess" à la racine de votre serveur. Au-dessus des règles wordpress:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# your rules start here. Keep the following lines that has been produced by wordpress
RewriteBase /
RewriteRule wp/(.*)$ /$1 [R=301]
RewriteRule /products-directory/(.*)$ /products-top-level-page [R=301]
RewriteRule /about-directory/(.*)$ /about-top-level-page [R=301]
RewriteRule /services-directory/$ /services-top-level-page [R=301]
RewriteRule /same-Word(.*)$ /newcategory/$1 [R=301]

L’indicateur [R = 301] indiquera au navigateur client ou au moteur de recherche qu’il s’agit d’une redirection permanente.

Vous voudrez probablement mettre à jour tous les permaliens de votre base de données wordpress. J'ai écrit un article sur la mise à jour de chaîne dans la base de données . Malheureusement, je n'ai pas encore traduit l'article. Mais les requêtes doivent être claires, sinon utilisez simplement la documentation MySQL.

1
2ndkauboy

J'utilise ceci: Simple 301 Redirects plugin - je l'ai utilisé pendant quelques pages auparavant et je vais bientôt déplacer mon site de conception Web avec tous ses fichiers et dossiers à l'intérieur de mes fichiers WP.

0
Steve Shearer