J'ai un RewriteRule
dans un fichier .htaccess
qui ne fait rien. Comment puis-je résoudre ce problème?
.htaccess
est même lu et obéi par Apache? Puis-je écrire un message d'écho "ça marche", si je l'écris, où cette ligne sera-t-elle renvoyée?.htaccess
n'est pas utilisé, comment puis-je le faire utiliser par Apache?.htaccess
est utilisé mais que ma RewriteRule
n'a toujours pas d'effet, que puis-je faire de plus pour déboguer?Entrez une valeur indésirable dans votre .htaccess
Par exemple. foo bar
, sakjnaskljdnas
tout mot clé non reconnu par htaccess et visitez votre URL. Si cela fonctionne, vous devriez obtenir un
500 Erreur interne du serveur
Erreur Interne du Serveur
Le serveur a rencontré une erreur interne ou une mauvaise configuration et n'a pas pu traiter votre demande ....
Je vous suggère de le mettre rapidement après RewriteEngine on
.
Depuis que vous êtes sur votre machine. Je suppose que vous avez accès au fichier Apache .conf
.
ouvrez le fichier .conf
et cherchez une ligne semblable à celle-ci:
LoadModule rewrite_module modules/mod_rewrite.so
S'il est commenté (#), décommentez et redémarrez Apache.
Pour vous connecter réécrire
RewriteEngine On
RewriteLog "/path/to/rewrite.log"
RewriteLogLevel 9
Mettez les 3 lignes ci-dessus dans votre virtualhost
. redémarrez le httpd.
RewriteLogLevel 9
L'utilisation d'une valeur élevée pour Level ralentira considérablement votre serveur Apache! Utilisez le fichier journal de réécriture à un niveau supérieur à 2 uniquement pour le débogage! Le niveau 9 enregistrera presque tous les détails du journal de réécriture.
Les choses ont changé dans Apache 2.4:
FROM Mise à niveau de la version 2.2 à la version 2.2
Les directives RewriteLog et RewriteLogLevel ont été supprimées. Cette fonctionnalité est désormais fournie en configurant le niveau de journalisation approprié pour le module mod_rewrite à l'aide de la directive LogLevel. Voir aussi la section relative à la journalisation mod_rewrite.
Pour plus d'informations sur LogLevel, voir Directive LogLevel
vous pouvez accomplir
RewriteLog "/path/to/rewrite.log"
de cette manière maintenant
LogLevel debug rewrite_module:debug
La réponse «Entrez une valeur indésirable» ne me convenait pas, mon site continuait à se charger malgré les éléments indésirables entrés.
Au lieu de cela, j'ai ajouté la ligne suivante en haut du fichier .htaccess:
deny from all
Cela vous permettra rapidement de savoir si .htaccess est récupéré ou non. Si le fichier .htaccess est utilisé, les fichiers de ce dossier ne se chargeront pas du tout.
Généralement, tout changement dans le fichier .htaccess devrait avoir des effets visibles. Si aucun effet, vérifiez vos fichiers de configuration Apache, quelque chose comme:
<Directory ..>
...
AllowOverride None
...
</Directory>
Devrait être changé en
AllowOverride All
Et vous pourrez modifier les directives dans les fichiers .htaccess.
Une méthode plus logique pourrait être de créer un fichier (par exemple, test.html), d’ajouter du contenu, puis d’essayer de le définir comme page d’index:
DirectoryIndex test.html
Pour la plupart, la règle .htaccess remplacera la configuration Apache où travailler au niveau du répertoire/fichier
Si vous avez accès au répertoire Apache bin, vous pouvez utiliser:
httpd -M
pour vérifier les modules chargés en premier.
info_module (shared) isapi_module (shared) log_config_module (shared) cache_disk_module (shared) mime_module (shared) negotiation_module (shared) proxy_module (shared) proxy_ajp_module (shared) rewrite_module (shared) setenvif_module (shared) socache_shmcb_module (shared) ssl_module (shared) status_module (shared) version_module (shared) php5_module (shared)
Après cela, de simples directives telles que Options -Indexes
ou deny from all
confirmeront que les .htaccess fonctionnent correctement.
Pour répondre à la première question des trois posées, un moyen simple de savoir si le fichier .htaccess fonctionne ou non est de déclencher une erreur personnalisée en haut du fichier .htaccess:
ErrorDocument 200 "Hello. This is your .htaccess file talking."
RewriteRule ^ - [L,R=200]
Concernant votre deuxième question, si le fichier .htaccess n'est pas en cours de lecture, il est possible que la configuration Apache principale du serveur ait AllowOverride
défini sur None
. La documentation d'Apache contient des conseils de dépannage pour cela ainsi que d'autres cas pouvant empêcher le .htaccess de prendre effet.
Enfin, pour répondre à votre troisième question, si vous devez déboguer des variables variables spécifiques que vous référencez dans votre règle de réécriture ou si vous utilisez une expression expression que vous souhaitez évaluer indépendamment de la règle, vous pouvez procéder comme suit:
Sortez la variable que vous référencez pour vous assurer qu'elle a la valeur que vous attendez:
ErrorDocument 200 "Request: %{THE_REQUEST} Referrer: %{HTTP_REFERER} Host: %{HTTP_Host}"
RewriteRule ^ - [L,R=200]
Testez indépendamment expression en le mettant dans une directive <If>
. Cela vous permet de vous assurer que votre expression est écrite correctement ou correspond lorsque vous vous attendez à ce qu'elle:
<If "%{REQUEST_URI} =~ /Word$/">
ErrorDocument 200 "Your expression is priceless!"
RewriteRule ^ - [L,R=200]
</If>
Joyeux débogage .htaccess!
Pour tester vos règles de réécriture htaccess, remplissez simplement l'URL à laquelle vous appliquez les règles, placez le contenu de votre htaccess sur la zone de saisie plus grande et cliquez sur le bouton "Test".