Warum hat index.html.bak Vorrang vor index.php (Apache)?

Warum hat index.html.bak Vorrang vor index.php (Apache)?

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_mimeEinstellungen und dieApache 2.4 mod_mimeDokumentation. Insbesondere Ihre MultiviewsMatchRichtlinieneinstellungen und diezugehörige Dokumentation.

Beachten Sie die folgende Warnung aus demselben Dokument:" AnyErweiterungen müssen übereinstimmen, auch wenn mod_mimedie Erweiterung nicht erkannt wird"kann verursachen"unvorhersehbare Ergebnisse, wie die Bereitstellung .oldvon .bakDateien, mit deren Bereitstellung der Webmaster nie gerechnet hat."

Apache-Modulmod_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.

MultiviewsMatchRichtlinie

// apache.org > 2.4 > mod_mime > multiviewsmatch

MultiviewsMatcherlaubt 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, oder index.html.gz.

Die NegotiatedOnlyOption sorgt dafür, dass jede Erweiterung, die dem Basisnamen folgt, mit einer anerkannten mod_mimeErweiterung 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.
 

HandlersUm mit und/oder verknüpfte Erweiterungen einzuschließen Filters, legen Sie die MultiviewsMatchDirektive entweder auf Handlers, Filters oder beide Optionsschlüsselwörter fest.

Sie können schließlich Anydie Übereinstimmung von Erweiterungen zulassen, auch wenn mod_mimediese nicht erkannt werden. Dies kann zu unvorhersehbaren Ergebnissen führen, z. B. zur Bereitstellung von .oldDateien, .bakmit 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 DirectoryIndexindex.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 MultiViewswar dies bereits standardmäßig eingestellt. Diese Option ermöglicht die Verwendung einer MultiviewsMatchDirektive, die die Bereitstellung alternativer Dateien wie foo.html.fr ermöglicht.

In meiner Apache-Hauptkonfiguration apache2.conf Options MultiViewswar 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-trashist 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 NegotiatedOnlysie konfiguriert sind. Diesen Dateierweiterungen wird application/x-trashunter 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 Multiviewsvollstä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 bakund verwenden MultiviewsMatch NegotiatedOnly.

verwandte Informationen