by Nobbie » 23. June 2010 12:35
Ich habe jetzt auch mal ein wenig getestet und kann nur sagen: das geht eben so nicht.
Ein Kernproblem ist, dass die Authorisierung zwar auf dem Server durchgeführt wird, aber ein erfolgreicher Login wird vom Browser verwaltet, d.h. der merkt sich die User-Daten für den nächsten (gleichen) Request.
Deswegen ist es sehr schwer feststellbar (dazu müßte man den Traffic protokollieren), welche Requests zwischen dem Browser und dem Server ausgetauscht werden. Die Dialogbox, die als Login erscheint, wird ja nicht von Apache gesendet, sondern vom Browser. Der hat seinerseits vom Apache die Nachricht bekommen, dass in einem bestimmten Kontext eine UserID benötigt wird. Wenn der Browser eine UserID im Cache hat, sendet er diese (mit Passwort), falls sie passt, sendet Apache die angeforderte Seite.
Ob Apache nun alle FilesMatch abklappert kann ich nicht mit Sicherheit sagen.
Ich stelle aber fest, dass in diesem Umfeld sich sogar die Browser verschieden verhalten, insbesondere wenn man die .htaccess immer wieder ändert und für die gleiche Datei (z.B. text1.html) einmal user1 und beim nächsten Mal user2 verlangt. Firefox kann sich sogar mehrere UserIDs merken und füttert offensichtlich Apache mit allen ihm bekannten UserIDs, bis dieser Ruhe gibt. Opera dagegen hängt sich platterdings auf. IE wiederum fragt bei user-Wechsel dann auf einmal drei(!) mal nach.
Interessant ist auch der Versuch, einfach genau das gleiche Pattern (beispielsweise 1\.htm$) zwei mal untereinander zu schreiben und oben nach user1 und unten nach user2 zu fragen - rein logisch müßte das unmöglich sein. Aber in der Praxis wird die Datei ausgeliefert.
Zusammenfassend kann ich nur sagen, es ist keine gute Idee, mehrere FilesMatch hintereinander zu schreiben, die überschneidende (oder gar komplett inkludierende) Pattern besitzen. Das sieht diese API einfach nicht vor und das Ergebnis ist chaotisch.