Voici quelques unes des erreurs les plus courantes :
- 401 : Authorization required
- 403 : Forbidden
- 404 : Not Found
- 406 : Request Timed Out
- 500 : Internal Server Error
- 503 : Service Unavailable
Jouer avec les index de répertoires
Quand un répertoire ne contient pas de fichier index.html (ou index.htm), Apache liste le contenu du répertoire, en donnant quelques informations, typiquement la taille des fichiers. Mais il est possible de spécifier d'autres informations, comme la date de dernière modification, et d'ajouter une courte description de chaque fichier.
La syntaxe est la suivante : IndexOptions FancyIndexing <autres directives>. Ces autres directives sont les suivantes :
- IconsAreLinks Les icônes qui renseignent le type de fichier deviennent aussi des liens
- ScanHTMLTitles On utilise pour la description des fichiers le titre des documents HTML.
- SuppressSize Supprime l'indication de taille des fichiers
- SuppressDescription Supprime la description
- SuppressLastModified Supprime la date de dernière modification
Exemple: vous avez un répertoire d'images appelé ~/www/images/, vous souhaitez avoir la taille et la description de chacune des images. Vous en profitez pour supprimer la date de dernière modification, qui ici vous importe peu et prend de la place.
- IndexOptions SuppressLastModified FancyIndexing
- AddDescription “Le bassin aux Ernests” images/ernests.gif
- AddDescription “La planète Mars” images/mars.jpg
Index alternatifs
Pour une raison quelconque, vous n'utilisez pas de fichiers index.html ou index.htm. Par exemple, vous utilisez PHP et pour vous, les fichiers d'index s'appellent index.php. Ou encore, vos fichiers d'index s'appellent tagada.html. Vous pouvez indiquer au serveur quels fichiers considérer comme des fichiers d'index :
DirectoryIndex index.php
Si vous utilisez des fichiers d'index aux noms différents, vous pouvez créer une liste. Apache regarde d'abord si le fichier cité en premier existe, et à défaut passe au suivant jusqu'à ce qu'il en trouve un, sinon il affiche le contenu du répertoire (sauf si vous avez désactivé cette fonction, bien sûr).
DirectoryIndex index.php tagada.html main.html index.html
Restrictions d'accès
Vous pouvez interdire l'accès à votre site à partir de certaines adresses IP. Rappel : une adresse IP est constitué de quatre nombres de 0 à 255 séparés par des points, par exemple l'adresse IP de clipper est 129.199.121.1.
Pour interdire une adresse IP :
deny from 123.456.789.10
Inversement, on peut autoriser une adresse IP :
allow from123.456.789.10
Si on indique un ou deux nombres seulement, ils sont interprétés comme des plages d'adresses IP. Par exemple, allow from 129.199 autorise tous les accès venant de l'École. deny from all interdit à tout le monde l'accès à vos fichiers, mais des scripts peuvent continuer à les utiliser.
En pratique, une interdiction de certaines IP prend la forme suivante :
order allow,deny deny from 123.45.6.7 # on interdit l'adresse précise 123.45.6.7 deny from 12.34.5 # on interdit toutes les adresses IP commençant par 12.34.5 allow from all # on autorise tous les autres
Exemple : vous souhaitez réserver une partie de votre site aux connexions venant de l'École. Admettons qu'il s'agisse de votre répertoire ~/www/normalos/. Créez dans ce répertoire une fichier .htaccess dans lequel vous écrirez :
order deny,allow deny from all allow from 129.199
On peut aussi utiliser des noms de domaine. Admettons que vous n'aimiez ni le gouvernenent américain ni l'entreprise de M. Gates. Vous pouvez écrire :
Deny from .gov microsoft.com
Authentification par mot de passe
JavaScript vous permet également ce genre d'identification, mais il vaut mieux passer par .htaccess : il est périlleux de confier la sécurité au navigateur de l'internaute, qui en fait ce qu'il veut. Vous n'avez pas ce genre de problème côté serveur.
Gardez cependant à l'esprit que la protection par mot de passe au niveau du serveur va faire passer le mot de passe en clair (non crypté). Si vous protégez par mot de passe un répertoire, il est possible de passer outre votre protection si l'on a connaissance de sous-répertoires non protégés.
Procédons par étapes.
1) On commence par créer un fichier .passwds qui contiendra les renseignements sur les personnes autorisées. Pour ce faire, on tape :
htpasswd -c .passwds toto
Ce qui crée à la fois .htpasswd et l'utilisateur toto, pour lequel on vous demande un mot de passe.
clipper ~ $ htpasswd -c .passwds toto New password: Re-type new password: Adding password for user toto
Pour ajouter d'autres utilisateurs : htpasswd .htpasswd titi. Pour en retirer, il suffit d'éditer le fichier et d'effacer la ligne correspondant à l'utilisateur concerné. htpasswd chiffre les mots de passe (en utilisant une variante de md5), qui ne figurent donc pas en clair dans les fichiers.
Pour en savoir plus, consultez la page de man de htpasswd.
2) On en revient à .htaccess et on tape :
AuthType Basic AuthUserFile /users/03/pataphys/vian/www/repertoire/.passwds # endroit où vous conservez les mots de passe AuthName "Entrez votre mot de passe" # ici vous indiquez ce qui figurera dans la barre de titre # de la fenêtre require valid-user
Si vous voulez protéger par mot de passe seulement certaines parties du site, il faut créer un .htaccess dans le répertoire concerné.
Vous ne voulez peut-être pas que l'on sache où vous rangez vos mots de passe. Il faut dans ce cas empêcher l'accès au fichier .htaccess lui-même. Pour protéger le fichier, taper :
<Files .htaccess> order allow,deny deny from all </Files>
Invalid argument: core_output_filter:
Invalid argument: core_output_filter: writing data to the network
Apache uses the sendfile syscall on platforms where it is available in order to speed sending of responses. Unfortunately, on some systems, Apache will detect the presence of sendfile at compile-time, even when it does not work properly. This happens most frequently when using network or other non-standard file-system.
Symptoms of this problem include the above message in the error log and zero-length responses to non-zero-sized files. The problem generally occurs only for static files, since dynamic content usually does not make use of sendfile.