23 votes

Apache : Quelle est la meilleure façon de gérer des milliers de redirections permanentes ?

Nous avons une liste de 3000 redirections 301. Nous avons besoin d'aide pour

  1. Quel serait le meilleur endroit pour les mettre ? Il semble que mettre ces 3000 lignes à l'intérieur de vhost dans httpd.conf serait un désordre.
  2. Quelles sont les méthodes recommandées pour gérer des milliers d'urls ?
  3. Dans quelle mesure cela va-t-il affecter la vitesse de chargement des pages et la charge du serveur Apache ?

Merci.

32voto

Peter Stone Points 1962

Vous pouvez utiliser Include dans la directive httpd.conf pour pouvoir gérer les redirections dans un autre fichier. Mais ce ne serait pas très efficace, car chaque requête devrait être vérifiée par de nombreuses expressions régulières. De plus, un redémarrage du serveur serait nécessaire après chaque modification du fichier.

Une meilleure solution pour autant de redirections serait d'utiliser RewriteMap de type dbm pour déclarer une correspondance entre les URI et les redirections. De cette façon, le système sera efficace, car les recherches dans les bases de données sont très rapides, et après un changement dans la carte, vous n'aurez pas besoin de redémarrer un serveur, comme le font les serveurs de l httpd vérifie l'heure de modification du fichier de la carte.

Une règle de réécriture ressemblerait à ceci (testé sur mon ordinateur Fedora 16) :

RewriteEngine On
RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]

Et la carte dbm sera créée à partir de la carte texte. /etc/httpd/conf/redirects.txt qui ressemble à ça :

/foo http://serverfault.com/
/bar/lorem/ipsum/ http://stackoverflow.com/

en utilisant une commande

httxt2dbm -f db -i /etc/httpd/conf/redirects.txt -o /etc/httpd/conf/redirects.db

0 votes

Merci pour la réponse. J'ai essayé mais j'obtiens des erreurs : mon fichier redirects.txt d'une ligne contient (valeurs séparées par des espaces) mondomaine.com/expérience mondomaine.com/nouvelle_page Il m'a donné une erreur d'analyse à la ligne 'RewriteCond ${redirects:$1} != ""' . Erreur de syntaxe à la ligne 314 de /usr/local/apache/conf/httpd.conf : RewriteCond : bad flag delimiters J'ai commenté cette ligne et apache a démarré mais en visitant mondomaine.com/expérience (ou toute autre url de mondomaine) m'a donné l'erreur "la demande est redirigée d'une manière qu'elle ne pouvait pas être complétée".

0 votes

Apache ne redémarre pas avec l'extrait ci-dessus. Pouvez-vous m'aider ? Je ne vois pas d'erreur liée à ce problème dans les fichiers journaux.

0 votes

J'ai dit qu'il n'avait pas été testé - je m'attendais à ce qu'il ait besoin de quelques ajustements. Je pensais que ce serait suffisant, désolé. Httpd n'a pas démarré car il ne peut y avoir d'espace entre != y "" - J'ai corrigé mon exemple en une version fonctionnelle et testée maintenant.

2voto

Lucas Kauffman Points 16740

J'écrirais un script qui génère un nouveau VHOST avec seulement les liens de la liste.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X