01/05/2012

Problemas con CSS generados en PHP y Internet Explorer 9

CSS, PHP, Internet Explorer

Josep Sanz

Tras algunos meses de estar entre nosotros el nuevo navegador de Microsoft, don Internet Explorer 9, algunos visitantes de saltos.net me informaron de que la web no se veia correctamente usando este navegador.

Tras mirar lo que sucedia, detecte desde los logs del apache que las peticiones de las hojas de estilo que hace Internet Explorer 9, eran respondidas por el própio servidor apache con un error HTTP 406 Not acceptable (No aceptable).

Este portal, esta desarrollado con RhinOS, el cual genera con PHP las hojas de estilo a partir de las plantillas. Esto quiere decir que en realidad, la petición del CSS que se hace, aunque parezca que se hace a un fichero estático .css, sea atendida por un script de PHP que interceptará la petición para atenderla y responder con el contenido del CSS y las cabeceras del content-type correspondientes: "text/css".

Como que el nuevo navegador envía la cabecera "Accept: text/css" únicamente en lugar de lo que todo el mundo hace que es "Accept: text/css; */*", hace que el servidor apache no procese con el php que debería la petición solicitada y al no encontrar la forma de resolverla, envia el error 406.

Para arreglar este problema, basta con añadir en el .htaccess la siguiente linea: "AddType text/css .php". Grácias a esta entrada en el fichero .htaccess, el servidor podrá relacionar las peticiones a un .php con un Accept "text/css", con lo que todo volverá a funcionar como si nada.

Si el servidor tiene desactivada la prestación de usar el fichero .htaccess para sobrecargar esta configuración, RhinOS ofrece otro metodo que consiste en usar una url alternativa que soluciona el problema. Para ello, basta con añadir el tag en la ruta del fichero CSS para que en caso de detectar un cliente con IE9, se publique la nueva url que servirá el contenido sin generar el error 406.

Gracias Microsoft por facilitar las cosas!!!


Líneas de XML
60,895
Líneas de PHP
18,657
Líneas de JS
11,620
Líneas de XSLT
2,498
Líneas de CSV
1,919
Líneas de CSS
577