Publié le 10 septembre 2020
Lors de la création d’un vhost sur Apache, une fois le code du site importé j’ai eu l’erreur suivante dans les logs :
AH01071: Got error 'Primary script unknown\n'
Plusieurs pages du site affichaient également un
File not found
.
J’ai pas mal galéré avant de trouver l’origine du problème, et surtout comment le résoudre.
Le code PHP du client était exécuté via FPM, avec la directive suivante :
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/palc.fr/$1
Mais à la racine de son site, un fichier .htaccess
était
rempli de règles de ce style :
^/gallery/index.php /phototheque.php [NC,L]
RewriteRule ^/gallery/client.php /phototheque-client.php [NC,L] RewriteRule
Le problème c’est que le ProxyPassMatch
est exécuté
avant les RewriteRule
du .htaccess
. Du coup,
quand on demande une page PHP correspondant à une
RewriteRule
, Apache va d’abord essayer de l’exécuter avec
FPM et retourner une erreur, puisque le fichier PHP n’existe pas.
La solution est de demander à Apache de n’utiliser FPM que si le fichier existe. Il faut remplacer
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/palc.fr/$1
Par :
<FilesMatch \.php$>
"proxy:fcgi://127.0.0.1:9000/"
SetHandler</FilesMatch>