De nombreuses affiches ont des problèmes pour déboguer leurs instructions RewriteRule et RewriteCond dans leurs .htaccess
fichiers. La plupart d'entre eux utilisent un service d'hébergement partagé et n'ont donc pas accès à la configuration du serveur racine. Ils ne peuvent pas éviter d'utiliser des .htaccess
fichiers pour la réécriture et ne peuvent pas activer un RewriteLogLevel "comme le suggèrent de nombreux répondants. De plus, il existe de nombreux .htaccess
pièges et contraintes spécifiques qui ne sont pas bien couverts. La configuration d'une pile LAMP de test locale implique trop de courbe d'apprentissage pour la plupart .
Donc, mon Q ici est de savoir comment recommanderions-nous de déboguer leurs règles eux-mêmes . Je donne quelques suggestions ci-dessous. D'autres suggestions seraient appréciées.
Comprenez que le moteur mod_rewrite parcourt les
.htaccess
fichiers . Le moteur exécute cette boucle:do execute server and vhost rewrites (in the Apache Virtual Host Config) find the lowest "Per Dir" .htaccess file on the file path with rewrites enabled if found(.htaccess) execute .htaccess rewrites (in the user's directory) while rewrite occurred
Ainsi, vos règles seront exécutées à plusieurs reprises et si vous modifiez le chemin URI, il peut finir par exécuter d'autres
.htaccess
fichiers s'ils existent. Assurez-vous donc de terminer cette boucle, si nécessaire en ajoutant desRewriteCond
règles supplémentaires pour arrêter le tir. Supprimez également tous les ensembles de règles de.htaccess
réécriture de niveau inférieur, sauf si vous avez l'intention explicite d'utiliser des ensembles de règles à plusieurs niveaux.Assurez-vous que la syntaxe de chaque expression rationnelle est correcte en testant par rapport à un ensemble de modèles de test pour vous assurer qu'il s'agit d'une syntaxe valide et fait ce que vous souhaitez avec une gamme complète d'URI de test. Voir la réponse ci-dessous pour plus de détails.
Créez vos règles de manière incrémentielle dans un répertoire de test. Vous pouvez utiliser la fonction «exécuter le
.htaccess
fichier le plus profond sur le chemin» pour configurer un répertoire de test (arborescence) distinct et déboguer les ensembles de règles ici sans bousiller vos règles principales et arrêter le fonctionnement de votre site. Vous devez les ajouter un à la fois car c'est le seul moyen de localiser les échecs des règles individuelles.Utilisez un stub factice pour vider les variables de serveur et d'environnement . (Voir Listing 2 ) Si votre application utilise, disons,
blog/index.php
vous pouvez le copiertest/blog/index.php
et l'utiliser pour tester les règles de votre blog dans letest
sous - répertoire. Vous pouvez également utiliser des variables d'environnement pour vous assurer que le moteur de réécriture interprète correctement les chaînes de substitution, par exempleRewriteRule ^(.*) - [E=TEST0:%{DOCUMENT_ROOT}/blog/html_cache/$1.html]
et recherchez ces variables REDIRECT_ * dans le vidage phpinfo. BTW, j'ai utilisé celui-ci et découvert sur mon site que je devais utiliser à la
%{ENV:DOCUMENT_ROOT_REAL}
place. Dans le cas d'une boucle de redirection, les variables REDIRECT_REDIRECT_ * listent la passe précédente. Etc..Assurez-vous que votre navigateur ne mord pas en mettant en cache des redirections 301 incorrectes . Voir la réponse ci-dessous . Mes remerciements à Ulrich Palha pour cela.
Le moteur de réécriture semble sensible aux règles en cascade dans un
.htaccess
contexte, (c'est là que celaRewriteRule
entraîne une substitution et cela revient à d'autres règles), car j'ai trouvé des bogues avec des sous-demandes internes (1) et un traitement PATH_INFO incorrect qui peut souvent be empêche l'utilisation des drapeaux [NS], [L] et [PT].
Avez-vous d'autres commentaires ou suggestions?
Listing 1 - phpinfo
<?php phpinfo(INFO_ENVIRONMENT|INFO_VARIABLES);