Wie kann ich .htaccess anweisen, nur Anfragen an die Ordner index.php und app/dist/* zuzulassen?

Wie kann ich .htaccess anweisen, nur Anfragen an die Ordner index.php und app/dist/* zuzulassen?

Dies ist der aktuelle Ordner:

/app
  /dist
    /index.html
    /index.css
    /index.js
  /src
    /configurations.json
/index.php
/configurations.php

Ich habe überall sensible Daten:

  • app/src/...
  • /...

Ich möchte, dass die Benutzer nur auf Folgendes zugreifen können:

  • index.php
  • app/dist/whateverfile.whateverformat

Der distOrdner kann sich ändern, daher muss ich ihnen den Zugriff auf dieses Verzeichnis statisch ermöglichen, damit ich nicht jede einzelne Datei auflisten muss.

.htaccessWie soll das mit dieser Syntax geschehen ?

Ich habe diese Konfiguration, die mir den Zugriff ermöglicht index.php. Aber keine Ahnung, wie ich das für den distOrdner erreichen kann ...

Options -Indexes
DirectoryIndex index.php

<FilesMatch ".*">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

<Files index.php>
    Order allow,deny
    Allow from all
    Satisfy All
</Files>

<Files "">
    Order allow,deny
    Allow from all
    Satisfy All
</Files>

Dank im Voraus.

Antwort1

Die <Files>und <FilesMatch>-Richtlinien zielen nurDateien, keine Verzeichnisse. Wenn Sie Zugriff auf die Serverkonfiguration haben, verwenden Sie möglicherweise einen <Directory>Container.

Verwenden von mod_rewrite

In .htaccesskönnen Sie mod_rewrite verwenden, um den Zugriff auf alles andere als /index.phpoder einzuschränken /app/dist/.

Zum Beispiel:

RewriteEngine On

RewriteRule !^(index\.php$|app/dist/) - [F]

Das Obige antwortet mit einer 403-Forbidden-Meldung für alle Anfragen, die nicht /index.phpgestartet werden oder werden /app/dist/. Wenn Sie stattdessen eine 404-Meldung zurückgeben möchten, ändern Sie diese Fin R=404.

Das !Präfix des regulären Ausdrucks negiert den regulären Ausdruck. Beachten Sie, dass der URL-Pfad, der mit demRewriteRule Musterbeginnt nicht mit einem Schrägstrich.

Wenn Sie nur mit einer 403-Antwort auf Anfragen antworten möchten, die auf tatsächliche Dateien oder Verzeichnisse verweisen (und andernfalls mit 404), fügen Sie einige Bedingungen hinzu, die das Dateisystem prüfen (beachten Sie jedoch, dass Dateisystemprüfungen relativ teuer sind. Verwenden Sie sie daher nicht, wenn Sie sie nicht benötigen). Beispiel:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule !^(index\.php$|app/dist/) - [F]

Nur wenn die angeforderte URL nicht in der erlaubten „Gruppe“ istUndwird einer Datei oder einem Verzeichnis zugeordnet, wenn die RewriteRuleDirektive ausgeführt wird.

Ich würde jedoch davon ausgehen, dass Ihre URLs tatsächlich nicht enthalten index.php(oder doch?). In diesem Fall fordert der Benutzer an /und mod_dir stellt eine interne Unteranforderung für /index.php(das DirectoryIndex). In diesem Fall müssen Sie das index.phpoptional machen.

Zum Beispiel:

RewriteRule !^((index\.php)?$|app/dist/) - [F]

Verwenden eines Apache-Ausdrucks

Alternativ können Sie dies mit einem Apache-Ausdruck tun (Apache 2.4).

<If "%{REQUEST_URI} !~ m#^/((index\.php)?$|app/dist/)#">
    Require all denied
</If>

Das Obige antwortet mit einer 403 für jede URL-Anfrage, die nicht ist /oder /index.phpmit beginnt /app/dist/.

Beachten Sie, dass Order, Allow, Deny, usw. ältere Apache 2.2-Direktiven sind und in Apache 2.4 offiziell veraltet sind.


Verwenden von mod_setenvif

Eine andere Alternative besteht darin, mod_setenvif zu verwenden und eine Umgebungsvariable festzulegen, wenn einer der zulässigen URL-Pfade angefordert wird, und den Zugriff nur zuzulassen, wenn diese Umgebungsvariable festgelegt ist.

Zum Beispiel:

SetEnvIf Request_URI "^/((index\.php)?$|app/dist/)" ALLOWED
Require env ALLOWED

Das Obige setzt die ALLOWEDUmgebungsvariable, wenn einer der zulässigen URL-Pfade angefordert wird. Die RequireDirektive erfordert dann, dass diese Umgebungsvariable gesetzt wird, um Zugriff zu gewähren, andernfalls wird eine 403 zurückgegeben.

Antwort2

Wenn dies Ihr Hauptproblem ist:„Ich habe überall sensible Daten“

Dies lässt sich am einfachsten und zuverlässigsten lösen, indem Sie den sensiblen Bereich an einen Ort außerhalb Ihres Web-Stammverzeichnisses verschieben ...

Stellen Sie sich ein Web-Stammverzeichnis (Ihr DocumentRoot) vor, das nur Folgendes enthält: index.php
Wenn sich dort keine anderen Daten befinden, benötigen Sie auch keine komplexen Regeln, um diese zu schützen …


Sie können dann beispielsweise dieAliasDirektive (vorzugsweise in Ihrer Hauptserverkonfigurationsdatei oder, wenn Sie es vorziehen, in einer .htaccessDatei in Ihrem Webstamm) oder Mod_rewrite-Regeln, um URIs Dokumenten zuzuordnen, die in Verzeichnissen außerhalb Ihrer DocumentRoot-Verzeichnisse/-Dateien gespeichert sind, um den Zugriff ausdrücklich zu erlauben.

dh

.
`-- some-path
    |-- app
    |   `-- dist
    |       |-- index.css
    |       |-- index.html
    |       `-- index.js
    |-- src
    |   `-- configurations.json
    `-- www.example.com
        |-- .htaccess
        `-- index.php

Wobei Ihre Haupt-Apache-Konfiguration /some-path/www.example.comals DocumentRootfür definiertwww.beispiel.com.
Das .htaccesskann dann etwas sein wie: Dies stellt das Verzeichnis /some-path/app/ und seinen gesamten Inhalt als URI-Pfad bereithttp://www.example.com/app/

# /some-path/www.example.com/.htaccess
# exposes/some-path/app/ directory  as the URI path `http://www.example.com/app/`

Alias "/app" "/some-path/app"

Alias "/app/dist" "/some-path/app/dist"Oder seien Sie mit einem regulären Ausdruck in einer Direktive spezifischer bzw. kreativer AlaisMatch.

Antwort3

Das ist wie:

Options -Indexes
ServerSignature Off 
DirectoryIndex index.php

RewriteEngine on
RewriteRule ^ui(/)?$ app/dist/index.html [QSA,END,NC,L]
RewriteRule ui/(.*) app/dist/$1 [QSA,END,NC,L]
RewriteRule !(ui/.*) index.php [QSA,END,NC,L]

Beachten Sie das ENDFlag nach jeder Übereinstimmung. Dieses Flag ist erforderlich, um die typische if-elseSyntax zu simulieren. Es ist jedoch nicht in den offiziellen Dokumenten dokumentiert.

Ich bin endlich zu Node.js gewechselt.

verwandte Informationen