Apache kann über Module um viele Funktionen erweitert werden und dadurch mit Hilfe von Modulen CGI-Skripte in verschiedenensten Programmiersprachen ausführen. Hier stehen nicht nur Perl und PHP zur Verfügung, sondern auch weitere Skriptsprachen wie Python oder Ruby. Zudem gibt es Module für die gesicherte übertragung von Daten mit SSL (Secure Sockets Layer), die Authentifizierung von Benutzern, erweitertes Logging und vieles mehr ermöglichen.
Apache kann über selbstgeschriebene Module an alle ausgefallenen Anforderungen und Wünsche angepasst werden. Natürlich ist dazu ein gewisses Maß an Know-How nötig. Referenzen auf weiterführende Informationen finden Sie im Abschnitt 15.13.4. “Weitere Quellen”
Wenn Apache eine Anfrage bearbeitet, können für die Bearbeitung dieser Anfrage einer oder mehrere Handler eingetragen sein. Dies geschieht über Anweisungen in der Konfigurationsdatei. Die Handler können Teil von Apache sein, es kann aber auch ein Modul für die Bearbeitung aufgerufen werden. Dadurch lässt sich dieser Vorgang sehr flexibel gestalten. Zudem besteht die Möglichkeit, eigene Module in Apache einzuklinken und so Einfluss auf die Bearbeitung der Anfragen zu nehmen.
Bei Apache 2 geht die Modularisierung recht weit, hier erfüllt der Server nur minimale Aufgaben, alles andere wird über Module realisiert. Das geht so weit, das bei Apache 2 selbst die Bearbeitung von HTTP über Module realisiert ist. Apache 2 muss demnach nicht unbedingt ein Webserver sein, er kann über andere Module auch ganz andere Aufgaben übernehmen. So gibt es als Modul beispielsweise einen Proof-of-Concept Mailserver (POP3) auf Apache-Basis.
Apache unterstützt eine Reihe von nützlichen Features, die im folgenden beschrieben werden.
Über virtuelle Hosts können mit einer Instanz von Apache auf einem einzigen Rechner mehrere Webseiten betrieben werden, wobei der Webserver für den Endbenutzer wie mehrere unabhängige Webserver wirkt. Dabei können die virtuellen Hosts auf unterschiedlichen IP-Addressen oder namensbasiert konfiguriert sein. Dies erspart die Anschaffungskosten und den Administrationsaufwand für zusätzliche Rechner.
Apache bietet eine Vielzahl von Möglichkeiten, URLs zu manipulieren und umzuschreiben (URL-Rewriting). Näheres dazu findet man in der Dokumentation zu Apache.
Apache kann in Abhängigkeit von den Fähigkeiten des Client (Browser) eine für diesen Client maßgeschneiderte Seite ausliefern. So kann man für ältere Browser oder Browser, die nur im Textmodus arbeiten (wie Lynx), einfachere Versionen der Seiten ausliefern, die keine Frames verwenden. Auf diese Weise kann man auch die notorischen Inkompatibilitäten der verschiedenen Browser, was JavaScript angeht, umgehen, indem man jedem Browser eine passende Version der Seiten liefert (wenn man den Aufwand treiben will, für jeden dieser Browser den JavaScript-Code anzupassen).
Falls ein Fehler auftritt, beispielsweise eine Seite nicht verfügbar ist, kann man flexibel reagieren und eine angemessene Antwort zurückgeben. Diese kann auch aktiv zusammengesetzt sein, beispielsweise mit Hilfe von CGI.