.htaccess leitet Unterordner zur entsprechenden index.php weiter

.htaccess leitet Unterordner zur entsprechenden index.php weiter

Wie kann ich jede Anfrage für einen Unterordner auf die index.php im selben Ordner umleiten?

myserver.com/folder/subfolder1/test   redirected to   folder/subfolder1/index.php
myserver.com/folder/subfolder2/test   redirected to   folder/subfolder2/index.php
...

Ich habe für jeden Unterordner eine .htaccess-Datei wie folgt hinzugefügt:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L,QSA] 

Ich möchte sie mit einer .htaccess im übergeordneten Ordner umleiten:

Folder/
        .htaccess    <-- one redirection here
        subfolder1/
                index.php
        subfolder2/
                index.php
        subfolder3/
                index.php
          ...  

        subfolder n /
                index.php

PS: Alle Unterordner haben unterschiedliche Namen und folgen keiner Namenskonvention.

Antwort1

Sie müssen nur sicherstellen, dass es DirectoryIndexin der Stammdatei richtig eingestellt ist .htaccess. (Die Standardeinstellung ist index.html, obwohl viele Distributionen index.phpauch binden, sodass Sie oft nichts tun müssen!)

Zum Beispiel:

DirectoryIndex index.php

Dies weist Apache (mod_dir) an, index.phpim angeforderten Verzeichnis nach einer Datei zu suchen (beachten Sie den relativen URL-Pfad), wenn Sie das Verzeichnis direkt anfordern.

Wenn das DirectoryIndexDokument (z. B. index.php) nicht gefunden wird, erhalten Sie eine 403-Meldung (vorausgesetzt, mod_autoindex ist aktiviert und Verzeichnislisten sind deaktiviert, z. B. Options -Indexes).

Mehr braucht ihr nicht hinzuzufügen. (Es sei denn, ihr wollt tatsächlich eine „externe Weiterleitung“?!)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L,QSA]

Sie müssen mod_rewrite nicht verwenden. Tatsächlich wird diese Regel hier sowieso nichts bewirken, da die 2.Zustandschließt Anfragen an Verzeichnisse explizit aus.

Referenz:

Antwort2

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+)/.*$ $1/index.php [L,QSA]

Ich habe die Antwort gefunden; mit dieser Regel wird jeder Ordner zu seiner index.php umgeleitet, wenn die Datei nicht existiert.

verwandte Informationen