wake-up-neo.net

Wie kann die Datei index.html aus einem Unterverzeichnis von DocumentRoot bereitgestellt werden, ohne Verknüpfungen auf Systemebene zu verwenden?

Wie kann die index.html - Datei aus einem Unterverzeichnis des DocumentRoot bereitgestellt werden, ohne Links auf Systemebene zu verwenden?

Zum Beispiel:

  • Der Dokumentenstamm eines virtuellen Apache 2.4-Hosts sei dirA
  • Die Basis-URL (VirtualHost) sei http://test.local/
  • Lassen Sie index.html in dirA/dirB/ liegen
  • Lassen Sie http://test.local/ (die Basis-URL) die Datei index.html auflösen (keine Verzeichnisliste angeben).

Ich habe versucht, Mod Rewrite zu verwenden, bin aber mit Regex und Mod Rewrite nicht vertraut. Die Regel, die ich habe, die funktioniert, ist RewriteRule . /html/index.html [L], aber dies ist nicht akzeptabel, da jede URL in test.local/html/aufgelöst wird (wo die index.html Datei lebt).

Was benötigt wird, ist, dass die genaue URL dem Dokumentenstamm entspricht. Finden Sie die Datei index.html in einem Unterverzeichnis des Dokumentenstamms (nämlich "html") anstelle des Dokumentenstamms - ohne Verwendung des Systems Ebene symbolische Verknüpfung (dh: vollständig aus Apache).

2
Jacob Fines

Möglicherweise möchten Sie die von @Stephen vorgeschlagene mod_rewrite-Lösung, berücksichtigen jedoch auch DirectoryIndex (abhängig von Ihren Anforderungen).

Das Dokument DirectoryIndex teilt Apache mit, welche Datei geliefert werden soll, wenn Sie ein Verzeichnis anfordern. Dies ist häufig der Standardwert index.html im angeforderten Verzeichnis. Sie können jedoch überall eine beliebige Datei angeben. Zum Beispiel:

DirectoryIndex /html/index.html

Dies weist Apache an, die root-relative /html/index.html -Datei bereitzustellen, wenn ein beliebiges Verzeichnis angefordert wird (z. B. das Dokument root, wie in Ihrem Fall). Wenn Sie index.html im angeforderten Verzeichnis bereitstellen möchten, wenn es vorhanden ist, andernfalls /html/index.html, können Sie beide in der Reihenfolge angeben, in der sie getestet werden sollen. Beispiel:

DirectoryIndex index.html /html/index.html

Referenz:
https://httpd.Apache.org/docs/2.4/mod/mod_dir.html#directoryindex

2
MrWhite

Ihre Umschreiberegel ist in der Nähe. Sie müssen es nur ein bisschen mehr einschränken.

RewriteRule ^\/?$ /html/index.html [L]

Der \/ entspricht einem wörtlichen Schrägstrich, der die gewünschte URL für die Homepage darstellt. Es wird mit dem Backslash entkommen.

Das Fragezeichen macht den Schrägstrich optional, damit die Regel entweder in .htaccess oder in einer Apache .conf -Datei verwendet werden kann.

Der ^ stimmt mit dem Anfang des URL-Pfads überein und der $ stimmt mit dem Ende des URL-Pfads überein. Wenn Sie diese aktivieren, wird die Regel auf die Startseite beschränkt.

Wenn Sie alle .html -Dateien in dieses Unterverzeichnis schreiben möchten, können Sie auch die folgende Regel hinzufügen:

RewriteCond %{REQUEST_URI} !^/html/
RewriteRule ^\/?(.*\.html)$ /html/$1 [L]
1