%3F.png)
Ich bin bei meiner neuen virtuellen Debian 11-Installation auf ein seltsames Verhalten gestoßen. Unter user/public_html habe ich einige Änderungen an einer Seite vorgenommen und irgendwann haben meine Browser angefangen, die Indexdatei herunterzuladen, anstatt sie darzustellen.
Es dauerte eine ganze Weile, bis mir klar wurde, dass das Problem die Datei index.html.bak war. Diese Datei wurde heruntergeladen, obwohl ich index.php im Ordner hatte.
Ich habe dies getestet, indem ich DirectoryIndex in Konfigurationen und .htaccess festgelegt habe, und ich kann das Problem immer reproduzieren, wenn index.html vor index.php festgelegt ist und DirectoryIndex nicht festgelegt ist. Index.html.bak wird immer vor index.php bereitgestellt. Wenn index.php zuerst in DirectoryIndex festgelegt ist, wird index.php korrekt bereitgestellt.
Merkwürdig ist, dass dies nur unter public_html passiert, nicht unter /var/www
Ich kann dies auf meinem alten Debian-Server mit älterem Apache nicht replizieren.
Ist das ein Fehler oder habe ich möglicherweise fehlerhafte Konfigurationen? Ich habe seit dieser Neuinstallation kaum eine der Konfigurationen geändert.
Apache-Version ist
Server version: Apache/2.4.54 (Debian) Server built: 2022-06-09T04:26:43
Antwort1
Apache-Modulmod_mime
Bitte überprüfen Sie Ihre Apache- mod_mime
Einstellungen und dieApache 2.4 mod_mime
Dokumentation. Insbesondere Ihre MultiviewsMatch
Richtlinieneinstellungen und diezugehörige Dokumentation.
Beachten Sie die folgende Warnung aus demselben Dokument:" Any
Erweiterungen müssen übereinstimmen, auch wenn mod_mime
die Erweiterung nicht erkannt wird"kann verursachen"unvorhersehbare Ergebnisse, wie die Bereitstellung .old
von .bak
Dateien, mit deren Bereitstellung der Webmaster nie gerechnet hat."
Apache-Modul
mod_mime
Dieses Modul wird verwendet, um dem für eine HTTP-Antwort ausgewählten Inhalt Inhaltsmetadaten zuzuweisendurch die Zuordnung von Mustern in der URI oder den Dateinamen zu den Metadatenwerten. Beispielsweise definieren die Dateinamenerweiterungen von Inhaltsdateien häufig den Internet-Medientyp, die Sprache, den Zeichensatz und die Inhaltskodierung des Inhalts. Diese Informationen werden in HTTP-Nachrichten gesendet, die diesen Inhalt enthalten, und bei der Inhaltsverhandlung bei der Auswahl von Alternativen verwendet, sodass die Präferenzen des Benutzers bei der Auswahl eines von mehreren möglichen Inhalten berücksichtigt werden. Siehemod_negotiationfür weitere Informationen überInhaltsverhandlung.
Dateien mit mehreren Erweiterungen
Dateien können mehr als eine Erweiterung haben; die Reihenfolge der Erweiterungen istnormalerweiseirrelevant. Wenn die Datei beispielsweisewillkommen.html.frwird auf den Inhaltstyp text/html und die Sprache Französisch abgebildet, dann wird die Dateiwillkommen.fr.htmlwird auf genau dieselben Informationen abgebildet.
Wenn Sie möchten, dass nur der letzte durch Punkte getrennte Teil des Dateinamens einem bestimmten Metadatenelement zugeordnet wird, verwenden Sie nicht dieHinzufügenRichtlinien.
MultiviewsMatch
Richtlinie
// apache.org > 2.4 > mod_mime > multiviewsmatch
MultiviewsMatch
erlaubt drei verschiedene Verhaltensweisen fürmod_negotiationDie Multiviews-Funktion von:Any
NegotiatedOnly
Filters|Handlers
[Handler|Filter]
Mit Multiviews kann eine Dateianforderung, z. B.
index.html
, mit allen ausgehandelten Erweiterungen übereinstimmen, die der Basisanforderung folgen, z. B.index.html.en
,index.html.fr
, oderindex.html.gz
.Die
NegotiatedOnly
Option sorgt dafür, dass jede Erweiterung, die dem Basisnamen folgt, mit einer anerkanntenmod_mime
Erweiterung für die Inhaltsverhandlung korrelieren muss, z. B. Zeichensatz, Inhaltstyp, Sprache oder Kodierung. Dies ist die strengste Implementierung mit den wenigsten unerwarteten Nebenwirkungen und das Standardverhalten.
Handlers
Um mit und/oder verknüpfte Erweiterungen einzuschließenFilters
, legen Sie dieMultiviewsMatch
Direktive entweder auf Handlers, Filters oder beide Optionsschlüsselwörter fest.
Sie können schließlich
Any
die Übereinstimmung von Erweiterungen zulassen, auch wennmod_mime
diese nicht erkannt werden. Dies kann zu unvorhersehbaren Ergebnissen führen, z. B. zur Bereitstellung von.old
Dateien,.bak
mit deren Bereitstellung der Webmaster nie gerechnet hat.
Antwort2
Dank an den BenutzerAntwort von Blind SpotsIch konnte dieses Rätsel (zumindest größtenteils) lösen und eine passende Konfiguration implementieren.
Antworten auf alle meine ursprünglichen Fragen:
Wenn DirectoryIndex
index.html vor index.php sortiert ist, priorisiert Apache zuerst index.html und dann alternative Versionen von index.html (z. B. index.html.bak), bevor index.php bereitgestellt wird, wenn diese fehlen.
In meinem Apache mods-enabled/userdir.conf Options MultiViews
war dies bereits standardmäßig eingestellt. Diese Option ermöglicht die Verwendung einer MultiviewsMatch
Direktive, die die Bereitstellung alternativer Dateien wie foo.html.fr ermöglicht.
In meiner Apache-Hauptkonfiguration apache2.conf Options MultiViews
war die Option für /var/www NICHT standardmäßig aktiviert, weshalb das fragliche Verhalten nur bei den public_html-Sites der Benutzer auftrat.
Ich weiß nicht, warum diese Standardeinstellung bei beiden unterschiedlich ist.
Für .bak-Dateien application/x-trash
ist in Debian standardmäßig der MIME-Typ festgelegt. Aus diesem Grund laden Browser die .html.bak-Dateien herunter, anstatt sie darzustellen.
Es gibt einige Unstimmigkeiten zwischen dem, was ich in Apache auf meinem Debian-basierten System festgestellt habe, und der Apache-Dokumentation:
Apache-Dokumente mod_mime.html#multiviewsmatch
Sie können schließlich alle passenden Erweiterungen zulassen, auch wenn mod_mime die Erweiterung nicht erkennt. Dies kann zu unvorhersehbaren Ergebnissen führen, z. B. zur Bereitstellung von .old- oder .bak-Dateien, mit deren Bereitstellung der Webmaster nie gerechnet hat.
Tatsächlich werden .old- und .bak-Dateien auch dann bereitgestellt, wenn MultiviewsMatch NegotiatedOnly
sie konfiguriert sind. Diesen Dateierweiterungen wird application/x-trash
unter Debian der MIME-Typ in /etc/mime.types zugewiesen. Für mich macht dieses Verhalten nicht viel Sinn und es widerspricht auch der Dokumentation, also ist das in gewisser Weise tatsächlich ein Fehler.
Wenn Sie die Funktion nicht Multiviews
vollständig deaktivieren möchten, sondern nur die Bereitstellung einiger bekannter Dateitypen deaktivieren möchten, können Sie deren MIME-Typen in mods-enabled/mime.conf aus Apache entfernen, indem Sie beispielsweise RemoveType bak
und verwenden MultiviewsMatch NegotiatedOnly
.