.htaccess – Redirection de tous vers index.php pour le dossier racine ou le sous-dossier

J’ai besoin d’un fichier .htaccess qui fonctionnera, qu’il soit placé dans le dossier racine ou dans un sous-dossier sans modification. Le script ci-dessous est celui que j’ai essayé d’adapter sans succès. J’ai essayé la solution sur htaccess rewrite index.php sur root et les sous – dossiers et je ne pouvais pas le faire fonctionner.

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

Disposition

 .htaccess index.php subfolder1 - .htaccess - index.php 

La route / blah devrait aller dans /index.php et / sous- dossier1 / ce qui devrait aller dans /subfolder1/index.php . Actuellement, le script ci-dessus enverra / sous-dossier1 / peu importe à /index.php .

[Mettre à jour]

Cela devrait également fonctionner pour n’importe quel chemin sous sous-dossier1, comme / subfolder1 / 1/2/3 / idunno .

Doit dire que c’est une exigence peu étrange mais la voici:

 Options +FollowSymLinks -MultiViews # Turn mod_rewrite on RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !/index\.php [NC] RewriteRule ^(.+?)(/[^/]*|)$ $1/index.php$2 [L] 

Si vous utilisez Apache 2.2.16 et versions ultérieures, vous pouvez simplement cesser d’utiliser mod_rewrite, qui, bien que très utile et puissant, peut devenir compliqué.

Une nouvelle directive dans mod_dir a été introduite, FallbackResource qui fait exactement cela, redirigeant vers l’URI de votre choix s’il n’y a pas de succès sur le système de fichiers. Il est disponible dans les fichiers .htaccess tant que les AllowOverride Indexes sont spécifiés pour les répertoires de la configuration.

Comme les fichiers .htaccess sont évalués en profondeur, il vous suffit d’avoir chaque fichier .htaccess pour décrire votre ressource de secours dans le répertoire en cours, et celui du sous- subfolder1 du sous subfolder1 répertoire1 sera prioritaire:

sous-dossier1 / .htaccess:

 FallbackResource index.php 

.htaccess:

 FallbackResource index.php 

Ils sont tous les deux identiques et fonctionnent correctement.

Il semble que cette directive ne soit pas encore connue, même si elle existe depuis quelques années, et son objective est précisément de résoudre ce problème de manière élégante.

Il n’y a qu’une seule limitation avec cette configuration. L’appel d’urls dans des sous-répertoires non existants du répertoire racine ou du sous-dossier1 produira une récursion de sous-requête et ensuite une erreur 500, car la ressource de secours est locale au répertoire donné.
La meilleure approche est d’avoir uris absolu (commençant par ‘/’) en tant que paramètre de FallbackResource, ce qui explique pourquoi l’exigence en elle-même est un peu étrange et ne joue probablement pas bien avec le fonctionnement interne d’Apache.