On peut ajouter de nombreuses fonctions à Apache par le biais de modules. Par exemple, Apache peut exécuter des scripts CGI dans différents langages de programmation en utilisant de tels modules. En plus de Perl et PHP, d'autres langages de scripts sont à votre disposition comme Python ou Ruby. Il existe aussi des modules pour le transfert sécurisé de données via SSL (Secure Sockets Layer - Couche de connexion sécurisée), pour l'authentification des utilisateurs, pour la journalisation avancée et bien plus encore.
Avec des connaissances suffisantes, il est possible de développer des modules pour Apache afin de l'adapter suivant vos besoins et vos préférences. Pour de plus amples informations sur ce sujet, veuillez vous référer à Section 30.12.4, « Autres sources ».
Vous pouvez indiquer différents gestionnaires (« handlers ») pour traiter les requêtes au moyen de directives contenues dans le fichier de configuration. Ces gestionnaires peuvent soit être partie intégrante d'Apache, soit être utilisés sous la forme de modules appelés pour traiter la requête, ce qui confère une grande flexibilité à cette procédure. Il est aussi possible d'utiliser vos propres modules avec Apache et ainsi influencer la façon dont les requêtes sont traitées.
Avec Apache, la modularité va très loin car, à l'exception de quelques tâches mineures, tout est géré par des modules. La progression a été telle que même HTTP est géré par le biais de modules. En conséquence, Apache n'est pas forcément un serveur web. Il peut aussi assurer des tâches totalement différentes grâce à d'autres modules. Par exemple, un serveur de messagerie POP3 basé sur Apache existe au titre d'étude de faisabilité.
Les modules Apache offrent plusieurs possibilités complémentaires très utiles :
La prise en charge des hôtes virtuels permet d'exploiter plusieurs sites web avec une seule instance d'Apache fonctionnant sur une unique machine physique. Pour l'utilisateur final, le serveur apparaît comme plusieurs serveurs indépendants. Les hôtes virtuels peuvent être configurés sur des adresses IP différentes ou sur la base des noms de domaine. Cela permet d'économiser les coûts d'acquisition et la charge de travail d'administration qui serait nécessaire pour plusieurs ordinateurs supplémentaires.
Apache offre une multitude de possibilités de manipulation et de transcription d'URL (URL rewriting). Pour de plus amples informations, consultez la documentation d'Apache.
Apache peut fournir au client (navigateur) une page adaptée à ses capacités. Par exemple, des versions simples et sans cadres d'une page donnée peuvent être transmises aux navigateurs anciens ou ne fonctionnant qu'en mode texte, comme Lynx. De manière similaire, on peut éviter l'incompatibilité de certains navigateurs avec JavaScript en fournissant aux différents navigateurs une version adaptée des pages web. Cela implique bien sûr d'adapter le code JavaScript à chaque navigateur.
En cas d'erreur (par exemple lorsqu'une page n'est pas disponible), il est possible de réagir de façon flexible et de donner une réponse appropriée. Cette réponse peut même être générée dynamiquement, par exemple à l'aide d'un script CGI.