Au démarrage (ou en reload), Apache charge son fichier de configuration.
Les fichiers .htaccess sont des fichiers de configuration Apache qui
permettent de venir modifier ces règles, pour contrôler le comportement
du serveur web pour le dossier dans lequel il est, ainsi que les
sous-répertoires, si le serveur permet l'Override avec AllowOverride.
Les .htaccess sont utiles pour la sécurité du site web
sous UNIX comme le nom .htaccess commence par un point, c'est un
fichier caché .
On peut leur donner un autre nom selon la configuration du serveur avec
la directive AccessFilename.
Pages d'erreur perso
Créer des pages html et un fichier .htaccess placé à la racine du site
ou un dossier en particulier:
<?php//echo crypt('4af3pr9yd25fr_Tr');password_hash('4af3pr9yd25fr_Tr', PASSWORD_DEFAULT);
produit $2y$10$B616ft29UAYlbrU3zf.V9.DLy9UyQTwGygZAOS0yD.MYt1DAS7Hv2
crypt() produit un warning, mais selon la doc c'est la bonne méthode.
Comme je ne compte pas voir le contenu de dossiers il contient un nom
d'utilisateur très compliqué. Au final le fichier .htpassword :
Ce fichier sera nommé différemment, il ne sera pas dans le répertoire de publication.
S'il l'est il sera protégé:
Pour Apache 2.2
<Files .DOMINFO>
Order allow,deny
Deny from all
</Files>
Pour Apache 2.4
<Files .DOMINFO>
Requirealldenied
</Files>
Apache est livré avec un utilitaire pour créer le fichier .htpassword.
Garder ce fichier en dehors du répertoire de publication, pour que les
clients ne puissent pas le télécharger.
Apache24/bin
Apache24/.htpassword
Apache24/htdocs
L'utilitaire demande de saisir le mot de passe:
D:\>cd D:\Lab\web\Apache24\bin
D:\Lab\web\Apache24\bin>htpasswd -c D:/Lab/web/Apache24/.htpasswd2 Joe
New password: **********
Re-type new password: **********
Adding password for user Joe
D:\Lab\web\Apache24\bin>
En local, pour que le htaccess fonctionne il ne faut pas définir un
Allowoverride trop restrictif:
DocumentRoot"D:\Lab\web\htdocs"
<Directory"D:\Lab\web\htdocs">
OptionsIndexesFollowSymLinks# AllowOverride controls what directives may be placed in .htaccess files.# It can be "All", "None", or any combination of the keywords:# AllowOverride FileInfo AuthConfig Limit#AllowOverride NoneAllowOverrideAllRequireallgranted
</Directory>
Cette règle cible les fichiers qui terminent par .htm .html .css .js .php
FilesMatch devrait être employé au lieu de Files quand il faut traiter
plusieurs fichiers:
Cible les fichiers qui commencent par admin ou staff et terminent par .php
Expressions régulières
^ commence par
$ finit par
Tout ce qui commence et finit par slash sera redirigé vers l'accueil :
RewriteRule ^/$ /accueil.html [R]
R c'est Redirect
L'utilisation du drapeau [R] provoque l'envoi d'une redirection au navigateur.
Quand index.html sera demandé, redirigé vers accueil.html
RewriteRule ^/index.html$ /accueil.html [R]
Duplicate Content
Parfois une page est accessible par deux URL:
http://www.domaine.fr/dos/page.html
http://dos.domaine.fr/page.html
Il faut empêcher ce phénomène qui ne favorise pas le PageRank.
Tout ce qui ne commence PAS par www.masta.fr sera redirigé vers www.masta.fr :
http://www.masta.fr/page1
deviendra
http://www.masta.fr/index.php?page=1
Avec cette règle,
RewriteRule"/pages/(.+)""/page.php?page=$1"
/pages/123?one=two sera réécrite en /page.php?page=123&one=two
et ça c'est bon pour le PageRank.
L'utilisation du drapeau [F] permet de faire envoyer par le serveur au client
un code de statut "403 Forbidden".
Le même effet peut être obtenu à l'aide de la directive Deny, mais ce drapeau
offre plus de souplesse dans l'attribution d'un statut Forbidden.
La règle suivante va interdire la téléchargement de fichiers .exe depuis
votre serveur.
RewriteRule"\.exe""-"
Cet exemple utilise la syntaxe "-" pour la cible de réécriture, ce qui
signifie que l'URI de la requête n'est pas modifié.
Il n'y a aucune raison de réécrire un URI, si vous avez l'intention
d'interdire la requête.
Lorsqu'on utilise [F], [L] est implicite - c'est à dire que la réponse
est renvoyée immédiatement, et aucune autre règle n'est évaluée.
https://www.ionos.fr/digitalguide/hebergement/aspects-techniques/les-meilleures-astuces-htaccess/
<Location />
require all granted
</Location>
#Note that you dont need to use require all denied#to require only a group of ips..
<Location /adm>
require ip myniceip
</Location>
<Location /disabled>
Require all denied
</Location>
# Apache 2.2
deny from all
allow from ip1
allow from ip2
# Apache 2.4require ip1
require ip2
Si le site comporte htacess+htpasswd, les IPs de confiance ne saisissent
pas de mot de passe, les autres oui.
dans un bloc virtualhost on peut créer une variable d'environnement:
SetEnv APPLICATION_ENV production
inclure un fichier conf
Include conf-available/server-ssl.conf
Favicon.ico
En parcourant les logs Apache, /favicon.ico représente 11000 octets inutiles
à chaque requête. Certains navigateurs le demandent automatiquement
même si la page HTML ne contient pas de
# 1re solution quand favicon.ico est demandé sort direct un 404
# la méthode ici à éviter, préférer le Redirect (ici en 410 Gone)RewriteEngine On
# if requested file is not an existing fileRewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
# and it's name is favicon.ico, send an empty 410 GONE response to the browserRewriteRule .*favicon\.ico$ -
# 2e solution créer un fichier vide nommé favicon.ico.
# et un vrai fichier png avec canal pour la prod.
Hotlinking
Quand un site web utilise les ressources d'un autre site.
Donc quelqu'un sur un forum ne pourra pas montrer vos belles images et
vous faire de la pub. Chacun fait comme il le sent. Ca peut servir à
protéger un dossier de photos privées.
# interdire le hotlinkingRewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://[-_a-z0-9.]*mondomaine\.tld$ [NC]
RewriteCond %{HTTP_REFERER} !^http://[-_a-z0-9.]*mondomaine\.tld/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://60gp\.ovh\.net/~loginftp/.*$ [NC]
RewriteRule .*\.(gif|jpe?g?|jp2|png|svgz?|ico|css|pdf|zip|gz|js|mp3|m4a|mp4|mov|divx|avi|wma?v?|wmp|swf|flv|docx?|xlsx?|pptx?|vbs|rtf|asf?x?|odt|ods|odp|odg|odb)$ - [NC,F]
#autre façon d'interdire le hotlinkingRewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?tranquille-informatique.fr/.*$ [NC]
ReWriteRule .(gif|png|jpe?g|swf|flv)$ - [F]
#autre façon d'interdire le hotlinkingRewriteEngine on
RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"RewriteRule"^/images""-"