Est-il possible d'avoir un gestionnaire apache mod_perl, qui reçoit toutes les demandes entrantes et décide en fonction d'un ensemble de règles si cette demande est quelque chose qu'il veut agir, et sinon, retourner le contrôle à Apache qui servirait la demande comme d'habitude?Apache mod_perl gestionnaire/répartiteur retournant le contrôle à apache
Un cas d'utilisation:
Un ancien site qui utilise DirectoryIndex pour servir index.html (ou similaire) et des gestionnaires par défaut pour scripts perl etc, est donné un rafraîchis url-scheme (django/catalyseur-ish). Un répartiteur aura un ensemble d'URL mappées aux contrôleurs qui sont répartis en fonction de sur l'URL entrante.
Cependant, la partie la plus délicate est d'avoir ce répartiteur dans le même espace de noms sur le même serveur virtuel que l'ancien site . La pensée est de réécrire le site morceau par morceau, comme une migration " " ne donne aucune chance de tester les performances du site avec le nouveau système, n'est pas possible en raison de la taille pure du site.
L'un des nombreux problèmes, est que le répartiteur reçoit maintenant toutes les URL comme prévu, mais DirectoryIndex et le contenu statique (qui est la plupart du temps servi par un hôte différent, mais pas tout) n'est pas servi correctement. Le dispatcher renvoie un Apache :: Const :: DECLINED pour les URL non concordantes, mais Apache ne continue pas à répondre à la demande comme il le ferait normalement, mais donne la page d'erreur par défaut. Apache ne semble pas essayer de rechercher /index.html etc.
Comment cela peut-il être résolu? Avez-vous besoin d'utiliser des redirections internes? Changer la pile du gestionnaire dans le répartiteur? Utilisez des directives intelligentes? Tout ce qui précède? Pas possible du tout?
Toutes les suggestions sont les bienvenues!
Une mise à jour rapide à ce sujet pour ceux qui sont intéressés. J'ai ajouté un PerlTransHandler pour pointer vers MyClass :: handler, dans lequel je vérifie toutes les URLs par rapport à $ r-> uri(). S'il y a une correspondance, faites: $ r-> handler ('perl-script'); $ r-> set_handlers (PerlResponseHandler => sub {$ self-> dispatch();}); La valeur de retour dépend du comportement souhaité. S'il n'y a pas de correspondance, retournez simplement Apache2 :: Const :: DECLINED. – myme