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
1 De Gonga -
Sous IE6, rien ne s'affiche, et la source ne contient que <!
#include virtual="xhtml.xhtml">2 De Vincent -
Ah oui, depuis le changement de serveur, ça ne fonctionne plus. Je pense que les ServerSide Includes ne sont pas installées.
Merci de l'avoir remarqué, je vais corriger ça :)
3 De Vincent -
Et voilà, ça fonctionne :)