Traitement d'une requête
Pour chaque règle de redirection, Apache retire le "perdir prefix" (dossier courant ou placeholder),
teste la règle, l'applique si elle matche, et ré-ajoute le per-dir prefix.
Le document root
est retiré à la fin de l'application de toutes les règles.
<If>
génère un placeholder *If/
en guise de per-dir prefix.
Démarrer l'URL de redirection par /
(ie /resources/favicon.ico
)
la rend absolue, et le perdir prefix ne sera pas ré-ajouté après application de la règle.
Déboguer une erreur HTTP 500
- Vérifiez ce qui se trouve dans le log d'Apache, vous y trouverez sûrement du détail sur votre erreur
- Vérifiez les logs d'accès d'Apache, pour trouver la variable/query string/URI qui est en cause, et vérifiez qu'elle ne soit pas exotique (UTF-8 multi-byte)
-
Testez sans cookie ni paramètre
GET/POST
, pour vérifier s'il s'agit d'une erreur dans l'URI (corrigez alors votre.htaccess
ouhttpd.conf
) -
Testez une URI plus basique, pour voir si une
RewriteRule
génère votre souci -
Testez sans votre
.htaccess
, et si tout marche, vous avez une erreur dedans
[ ] dans le chemin d'installation
N'installez pas Apache dans un dossier dont le nom contient [ ]
!
Ces crochets "cassent" la configuration d'Apache, et génèrent une erreur.
Cette erreur n'est pas remontée dans les log Apache, et ce dernier répond alors
une simple HTTP 500
sans plus de précision.
Je vous invite donc à ne pas installer Apache dans un dossier dont le nom contient
des crochets [ ]
, voire aucun caractère spécial.
Cela vaut également pour tous les dossiers parents.
Evitez donc c:\programmes\Apache[x64]
et c:\programmes[x64]\Apache
, au profit de
c:\programmes\Apache-x64
.
RewriteRule matchent octet par octet
Dans les RewriteRule
d'Apache, . = 1 octet
.
Or, en UTF-8, certains caractères prennent plusieurs octets,
comme 是
qui occupe deux octets (0x66 0x2f
). Un seul
.
ne le matchera pas.