Würde Basic-Auth nicht aber auch das Includen der Datei verhindern?
Nein, wie geschrieben: htaccess wird durch den Webserver erledigt. Da ist php nicht involviert. include() funktioniert im Dateisystem, da ist der Webserver-Dienst nicht involviert.
Ich hab das mal ein bisschen veranschaulicht.
1. Der Browser baut bspw. über Port 80 eine Verbindung mit dem Webserver auf und fordert die Datei index.php im DocumentRoot an.
2. Der Webserver kramt in seinem Dateisytem unter dem DocumentRoot nach der Datei, die in der URL angeben ist. Findet er die Datei nicht, liefert er einen 404-Fehler an den Browser ggf. mit etwas HTML für genauere Anzeige, was schief gelaufen ist.
3. Er schaut, ob in dem Ordner, in dem die Datei liegt, eine .htaccess-Datei vorhanden ist, wenn ja, wird diese verarbeitet. Ist dort eine Basic-Auth-Direktive hinterlegt, wird er den Browser zurückfragen und um Credentials (Benutzername + Passwort, Zertifikat, was-auch-immer) bitten. Der Browser muss sich also authentifizieren. Ggf. kommt noch eine Authorisierung zum Tragen, wenn auf bestimmte Resourcen bestimmte Authentifizierungen notwendig sind. Aber das ist erstmal egal und nicht Gegenstand deiner Frage.
Bis hier ist alles noch HTTP.
4. Der Webserver schaut nach erfolgreicher Authentifizierung nach, ob er für die Dateiendung einen speziellen Mimetypen festgelegt hat (AddType-Direktive), in dem Falle stellt er fest, das es sich um ein Dokument vom Typen application/x-httpd-php handelt und er diese Datei speziell behandeln soll. Also schickt er den Request an das PHP-Modul oder auch an die FCGI-Variante, je nach Konfiguration. Dabei werden die HTTP-Client-Header mit an das Modul übergeben. Dazu gehören Cookie/Session/File/POST- oder GET-Werte.
5. PHP verarbeitet das Script unter Berücksichtigung der Client-Header (oder auch nicht) ab. Das Ergebnis ist in der Regel ein Datenstrom, der vom Typ text/html ist und die Ausgabe des PHP-Scripts darstellt. Das Ergebnis hat außerdem eine bestimmte Größe (siehe strlen()). Die Ausgabe wird an den Webserver zurück gegeben, der sie an den Client zurück sendet. In den Scripts selbst kann dann ein oder mehrere include() stattfinden, die im Dateisystem behandelt werden. Anhand des Schaubildes kannst du erkennen, das der Webserver nicht involviert ist.
Fragen?