web-dev-qa-db-fra.com

Manière optimale d'implémenter une très grande liste de redirection dans Apache2

J'ai environ 6000 URL qui doivent être redirigées après avoir changé le CMS. Toutes ces URL sont stockées dans une table de base de données avec un ID qui me permet de dire ce qui est référencé. En utilisant cette table, je pourrais générer un énorme .htaccess avec beaucoup de règles de réécriture, mais je suppose que cela est très inefficace. Quelle est la meilleure voie à suivre? Autant que je sache, il y a deux options:

  • Utiliser un RewriteMap où la clé est l’ancienne URL (elle ne contient pas d’ID, mais juste du texte, elle doit donc être l’intégralité). Je me demande si le fait d'avoir de longues clés de 100 à 150 caractères fonctionnera bien.
  • Générer une table de base de données qui correspond exactement à chaque paire d'URL ancienne/nouvelle et appeler un petit script pour effectuer la redirection.

(Pourrait être résumé comme suit: une carte de hachage stockée dans le système de fichiers est-elle plus efficace qu'une table de base de données indexée?)

Deuxième partie de la question. Les nouvelles URL contiennent l'ID de la page invoquée. Quelque chose comme

www.example.com/abc/21-defghi.html

Si à la place j'appelle

www.example.com/21-xxx.html

Je reçois une redirection 301 vers l'URL correcte. Dois-je me donner la peine de générer la nouvelle URL exacte ou puis-je concaténer deux redirections? Cela signifie que vous ne stockez qu'un ID ou la nouvelle URL complète.

4
Omar Kohl

La création d'un fichier .htaccess énorme peut avoir un impact important sur les performances de votre système, car il est lu de manière linéaire pour toutes les demandes, au moins jusqu'à ce qu'une règle avec l'attribut L (Last Rule) soit mise en correspondance.

La façon dont j'ai fait quelque chose de similaire (environ 3000 redirections) consiste à mettre une page d'erreur personnalisée dans le fichier .htaccess. De mémoire, la syntaxe ressemble à ceci:

ErrorDocument 404 404.php

Ensuite, dans 404.php, implémentez la logique à l'aide d'une base de données MySQL, en recherchant la nouvelle URL à l'aide de l'URL demandée. S'il est trouvé, redirigez la demande à l'aide de l'en-tête d'emplacement PHP. Sinon, affichez une page d'erreur personnalisée.

Contrairement à la simple émission de la redirection 404 dans le fichier . Htaccess, le fichier 404.php peut garder une trace des demandes et des statistiques sur les redirections renvoyées.

6
Itai