web-dev-qa-db-fra.com

Comment déboguer .htaccess RewriteRule ne fonctionne pas

J'ai un RewriteRule dans un fichier .htaccess qui ne fait rien. Comment puis-je résoudre ce problème?

  • Comment puis-je vérifier si le fichier .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?
  • Si le fichier .htaccess n'est pas utilisé, comment puis-je le faire utiliser par Apache?
  • Si le .htaccess est utilisé mais que ma RewriteRule n'a toujours pas d'effet, que puis-je faire de plus pour déboguer?
111
macha

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.


METTRE À JOUR

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
140
ThinkingMonkey

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.

45
caitriona

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.

32
jgpATs2w

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

5
Cez

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.

3
Abhishek Gurjar

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!

2
PeterA

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". 

http://htaccess.mwl.be/

1
Ganesh Kandu