118 votes

Comment déboguer un .htaccess RewriteRule qui ne fonctionne pas ?

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

  • Comment puis-je vérifier si le .htaccess est même lu et respecté par Apache ? Puis-je écrire un message echo "ça marche", si je l'écris, où cette ligne serait-elle renvoyée ?
  • Si le .htaccess n'est pas utilisé, comment puis-je faire en sorte qu'Apache l'utilise ?
  • Si le .htaccess est utilisé mais mon RewriteRule n'a toujours pas d'effet, que puis-je faire de plus pour déboguer ?

150voto

ThinkingMonkey Points 6309

Entrez l'ordure de la valeur dans votre .htaccess et visitez votre URL. Si elle fonctionne, vous devriez obtenir une

500 Erreur Interne Du Serveur

Erreur Interne Du Serveur

Le serveur a rencontré une erreur interne ou de mauvaise configuration et a été incapable de compléter votre demande....

Je vous suggère de le mettre rapidement après l' RewriteEngine on.


Puisque vous êtes sur votre machine. Je suppose que vous avez accès à apache .conf le fichier.

ouvrez l' .conf fichier et recherchez une ligne du genre:

LoadModule rewrite_module modules/mod_rewrite.so

Si elle est commentée(#), décommentez et redémarrer apache.


Pour ouvrir une session de réécriture

RewriteEngine On
RewriteLog "/path/to/rewrite.log"
RewriteLogLevel 9

Placez le au-dessus de 3 lignes dans votre virtualhost. redémarrez le httpd.

RewriteLogLevel 9 À l'aide d'une grande valeur pour le Niveau va ralentir votre serveur Apache de façon spectaculaire! L'utilisation de la réécriture du fichier journal à un Niveau supérieur à 2 uniquement pour le débogage! Niveau 9 vous connecter presque tous les rewritelog détail.


Mise à JOUR

Les choses ont changé dans Apache 2.4:

À PARTIR de la mise à niveau à 2,4 2,2

Le RewriteLog et RewriteLogLevel directives ont été supprimées. Cette fonctionnalité est désormais fournie par la configuration du niveau approprié de la journalisation pour le module mod_rewrite à l'aide de la LogLevel directive. Voir aussi le mod_rewrite section enregistrement.

Pour en savoir plus sur LogLevel, consultez Directive LogLevel

vous pouvez accomplir

RewriteLog "/path/to/rewrite.log"

de cette manière maintenant

LogLevel debug rewrite_module:debug

0 votes

@macha essayez la méthode ci-dessus. Si vous obtenez une erreur de serveur interne, cela signifie que le mod_rewrite(.htaccess) est activé. Êtes-vous sur un hôte partagé ?

0 votes

Non, je travaille sur mon hôte local. Avez-vous une idée du moment où le fichier .htaccess est chargé ? Je pensais qu'Apache le lirait en premier

0 votes

Les fichiers .htaccess de @macha ne sont jamais chargés. Ils sont accédés (s'ils sont présents) par Apache lorsque vous essayez d'accéder à une page qui est présente dans ce dossier.

53voto

caitriona Points 1876

La réponse « Entrer une valeur indésirable » n’a pas fait le truc pour moi, mon site continue de charger malgré la jonque est entrée.

Au lieu de cela, j’ai ajouté la ligne suivante au début du fichier .htaccess :

Cela vous permettra rapidement savoir si .htaccess est ramassés ou non. Si le .htaccess est utilisé, les fichiers dans ce dossier ne se chargent pas du tout.

4 votes

C'est le test le plus simple si cela ne vous dérange pas que rien ne fonctionne pendant quelques secondes pendant que vous vérifiez.

1 votes

Oui, il m'a fallu environ une seconde pour vérifier que le site sur lequel je travaillais n'utilisait pas de fichiers .htaccess.

1 votes

Merci, ça marche comme sur des roulettes :) j'ai gagné du temps à déboguer !

33voto

jgpATs2w Points 348

En général, toute modification du 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 serez en mesure de modifier les directives dans les fichiers .htaccess.

0 votes

Merci. J'ai trouvé la section pertinente dans le fichier principal apache2.conf pour l'arborescence des répertoires /var/www

6voto

Cez Points 2666

Une méthode plus logique consisterait peut-être à créer un fichier (par exemple test.html), à y ajouter du contenu, puis à essayer de le définir comme page d'index :

DirectoryIndex test.html

Dans la plupart des cas, la règle .htaccess prévaut sur la configuration d'Apache lorsque l'on travaille au niveau des répertoires et des fichiers.

-1voto

Ben Rabidou Points 147

Pourquoi ne pas mettre des saletés dans votre fichier .htaccess et essayer de recharger apache. Si apache ne démarre pas, vous savez qu'il fonctionne. Supprimez la saleté puis rechargez Apache. S'il se charge, vous avez configuré le fichier .htaccess correctement.

7 votes

Je ne pense pas qu'Apache échouera à démarrer ou à s'exécuter s'il y a un mauvais .htaccess, étant donné qu'il ne vérifie pas le .htaccess avant qu'il y ait une demande de page.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X