De nombreuses affiches ont des problèmes de débogage leur RewriteRule et RewriteCond instructions à l'intérieur de leur .htaccess
fichiers. La plupart de ces derniers sont à l'aide d'un service d'hébergement mutualisé et n'ont donc pas accès à la racine du serveur de configuration. Ils ne peuvent pas éviter d'utiliser des .htaccess
fichiers pour la réécriture et ne peut pas permettre à un RewriteLogLevel" comme de nombreux répondants suggèrent. Il y a aussi beaucoup d' .htaccess
-spécifiques, les pièges et les contraintes ne sont pas couverts. La configuration d'un local de la LAMPE de test de pile implique trop de courbe d'apprentissage pour la plupart.
Donc, mon Q ici est de savoir comment nous recommandons qu'ils déboguer leurs règles elles-mêmes. J'ai quelques suggestions ci-dessous. D'autres suggestions seraient appréciées.
-
Comprendre que le mod_rewrite moteur parcourt
.htaccess
fichiers. Le moteur tourne 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
Si vos règles seront exécutés à plusieurs reprises et si vous changez le chemin de l'URI ensuite, il peut finir par l'exécution d'autres
.htacess
fichiers s'ils existent. Donc, assurez-vous de mettre fin à cette boucle, si nécessaire en ajoutant desRewriteCond
d'arrêter les règles de tir. Également supprimer un niveau inférieur.htaccess
jeux de règles de réécriture, sauf si explicitement l'intention de l'utiliser multi-niveau jeux de règles. Assurez-vous que la syntaxe de chaque Regexp est correct par test par rapport à un ensemble de modèles de test pour vous assurer que c'est une syntaxe valide et fait ce que vous avez l'intention avec un éventail de test Uri. Voir la réponse ci-dessous pour plus de détails.
Construire vos règles progressivement dans un répertoire de test. Vous pouvez faire usage de la "exécuter le plus profond de l'
.htaccess
le fichier sur le chemin d'accès à la fonctionnalité" pour définir un répertoire de test (arbre) et de déboguer des jeux de règles ici sans vissage vos principales règles et l'arrêt de votre site de travail. Vous devez les ajouter un à un moment parce que c'est la seule façon de localiser les défaillances des différentes règles.-
Utiliser un mannequin script de stub pour vider le serveur et les variables d'environnement. (Voir Listing 2)Si votre application utilise, disons,
blog/index.php
ensuite, vous pouvez copier ce entest/blog/index.php
et l'utiliser pour l'essai de votre blog les règles dans l'test
sous-répertoire. Vous pouvez également utiliser des variables d'environnement pour s'assurer que le moteur de réécriture dans l'interprétation des chaînes de substitution correctement, par exempleRewriteRule ^(.*) - [E=TEST0:%{DOCUMENT_ROOT}/blog/html_cache/$1.html]
et regarder pour ces REDIRECT_* variables dans le phpinfo de vidage. BTW, j'ai utilisé celui-ci et de découvrir sur mon site que j'ai dû utiliser
%{ENV:DOCUMENT_ROOT_REAL}
à la place. Dans le cas de redirecteur boucle REDIRECT_REDIRECT_* liste des variables de la passe précédente. Etc.. Assurez-vous que vous n'avez pas de se faire mordre par votre cache de navigateur incorrecte des redirections 301. Voir la réponse ci-dessous. Merci à Ulrich Palha pour cela.
Le moteur de réécriture semble sensible à la cascade de règles au sein d'un
.htaccess
contexte, (c'est là unRewriteRule
résultats dans une substitution, et cela tombe bien que d'autres règles), j'ai trouvé des bugs avec les sous-requêtes (1), et incorrectes PATH_INFO de traitement, ce qui peut souvent être empêché par l'utilisation de la [NS], [L] et [PT] les drapeaux.
Plus de commentaire ou des suggestions?
Listing 1 -- phpinfo
<?php phpinfo(INFO_ENVIRONMENT|INFO_VARIABLES);