Envoyer de l'application/xhtml+xml avec la négociation de contenu d'Apache

Voici la méthode que j'ai trouvée pour envoyer le bon type MIME avec vos documents XHTML sans pour autant laisser à la traine les navigateurs ne le supportant pas.

Le serveur web Apache utilise l'extension de votre fichier pour en déterminer le type MIME. Les fichiers .html sont envoyés en text/html et les fichiers .xhtml sont envoyés en application/xhtml+xml.

Le plus simple est donc de commencer à se créer un fichier avec l'extension .xhtml pour envoyer un type MIME correct aux navigateurs les plus récents. Vous pouvez ainsi commencer le développement de votre page web, et la tester sur Mozilla Firefox par exemple.

Il faut maintenant s'occuper des navigateurs ne supportant pas le type MIME application/xhtml+xml, notamment IE qui vous proposera de tout simplement télécharger le fichier (et de le visionner dans Firefox s'il est installé ^^).

Nous allons donc créer un fichier .html identique au premier qui sera donc envoyé par Apache en tant que text/html. Vous devriez maintenant disposez de 2 fichiers identiques, dont les URL ne différent que par les extensions.

Qu'à cela ne tienne, n'utilisons plus les extensions ! Apache possède une merveilleuse option appelée Multiviews et qui permet de se passer des extensions des fichiers dans les URL. Cette option s'active dans un fichier .htaccess avec la commande Options +MultiViews. Le gros avantage de cette option qui nous intéresse est qu'elle va faire de la négociation de contenu, c'est à dire qu'elle va deviner quelle extension utiliser et envoyer le fichier .xhtml aux navigateurs supportant le application/xhtml+xml et le fichier .html aux autres.

Mais me direz-vous, je ne vais pas doubler ainsi tous les fichiers de mon site ? Bah non ! Tonton Anubis à la rescousse !

Il existe une deuxième option fort intéressante dans Apache qui permet de faire quelques manipulations de contenu sans pour autant passer par PHP. Cette option s'appelle les Server Side Include (SSI) et s'active dans le fichier .htacess avec Options +Includes (ce qui donne Options +MultiViews +Includes pour ceux qui suivent).

Pour ne pas désavantager les navigateurs modernes, nous allons inclure le contenu du fichier .xhtml dans le fichier .html. Pour cela, il nous faut renommer le fichier .html en .shtml, et en remplacer tout le contenu par un simple <!--#include virtual="monfichier.xhtml"-->.

Et voilà, Apache sélectionnera tout seul le fichier .xhtml pour les navigateurs récents, et sélectionnera le fichier .shtml en y incluant le contenu du fichier .xhtml pour les autres.

Vous pouvez voir une démonstration de cette technique sur //mess.genezys.net/xhtml

Haut de page