Quelqu'un peut-il m'expliquer dans quel ordre Apache exécute les fichiers .htaccess situés à différents niveaux du même chemin et quelle est la priorité des règles de réécriture?
Par exemple, pourquoi la règle de réécriture du premier fichier .htaccess ci-dessous ne fonctionne-t-elle pas et celle de /blog
est-elle priorisée?
.htaccess dans /
RewriteEngine on
RewriteBase /
RewriteRule ^blog offline.html [L]
.htaccess dans /blog
RewriteEngine On
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
PS: Je ne cherche pas simplement une réponse, mais un moyen de comprendre les éléments internes d'Apache/mod_rewrite ... pourquoi est plus important pour moi que comment résoudre ce problème ,
Je suppose que vous devriez lire le Apache Tutorial: .htaccess , principalement la section "Comment les directives sont appliquées", qui indique:
Les directives de configuration trouvées dans un fichier .htaccess sont appliquées au répertoire dans lequel se trouve le fichier .htaccess et à tous ses sous-répertoires. Cependant, il est important de garder à l'esprit qu'il peut y avoir eu des fichiers .htaccess dans les répertoires supérieurs. Les directives sont appliquées dans l'ordre dans lequel elles ont été trouvées. Par conséquent, un fichier .htaccess dans un répertoire particulier peut remplacer les directives trouvées dans les fichiers .htaccess situés plus haut dans l'arborescence. Et celles-ci, à leur tour, peuvent avoir remplacé des directives trouvées encore plus haut, ou dans le fichier de configuration du serveur principal lui-même.
Donnez-lui une lecture complète et. Htaccess ne sera plus un mystère.
Vous pouvez utiliser RewriteOptions inherit
pour hériter des règles de réécriture du répertoire parent. Cependant, les règles de réécriture du répertoire parent seront appliquées ultérieurement, conformément à la documentation sur RewriteOptions .