Contexte
- application utilisant les URLS significatives + configuration pour supprimer le point d'entrée
- serveur apache + php5 en cgi
- mise en place .htaccess dans www/ de l'application pour ajouter des règles de rewrite afin de faire fonctionner l'application sans utiliser le point d'entrée.
Le .htaccess :
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
Bug
Debug
Dans les logs, il apparaît :
"Premature end of script headers: index.php"
Test avec cette règle de rewrite :
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/?q=$1 [L]
En testant toujours http://foo.com/bar l'application s'affichait bien (même si la page affichée ne correspondait pas à ce qui était demandé)
Dans le php.ini on a fini par passer cgi.fix_pathinfo à 0 et le serveur s'est mis à bien faire fonctionner l'application.
Voici ce qui est dit à propos de cette variable :
cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok what PATH_INFO is.
For more information on PATH_INFO, see the cgi specs.
Setting this to 1 will cause PHP CGI to fix it's paths to conform to the spec.
A setting of zero causes PHP to behave as before.
Default is 1.
You should fix your scripts to use SCRIPT_FILENAME rather than PATH_TRANSLATED.