Le fichier de configuration d'Apache .htaccess est un point difficile et important. Je n'ai jamais pris le temps de l'apprendre attentivement. J'ai toujours pensé que la méthode Redirect appartenait à mod_rewrite, et je suis confus lors de son utilisation. J'ai trouvé un très bon tutoriel aujourd'hui et, tout en l'apprenant, j'ai écrit quelques réflexions.
mis à jour : correction continue de quelques problèmes mineurs
Source : Guide complet de .htaccess
Référence officielle : Référence rapide de la directive
1 Introduction Introduction
Nom du fichier.htaccess attribut 644 (RW-R–R–)
htaccess affectera tous les sous-répertoires du répertoire où il se trouve. Notez que la plupart du contenu doit être conservé sur une seule ligne et ne pas être renvoyé à la ligne. Sinon, une erreur se produira.
2 Documents d'erreur Documents d'erreur
Document officiel : Directive ErrorDocument
Document de code ErrorDocument
exemple
Document d'erreur 400 /errors/badrequest.html
Document d'erreur 404 http://votresite/errors/notfound.html
Document d'erreur 401 « Autorisation requise »
(Notez que tous les guillemets doubles qui apparaissent plus tard dans le contenu doivent être échappés comme ")
Codes d'état HTTP courants
Demandes clients réussies
200 OK
201 Créé
202 Accepté
203 Informations ne faisant pas autorité
204 Aucun contenu
205 Réinitialiser le contenu
206 Contenu partiel
Demande client redirigée
300 choix multiples
301 Déménagé définitivement
302 Déplacé temporairement
303 Voir Autre
304 Non modifié
305 Utiliser un proxy
Erreurs de demande client
400 requêtes incorrectes
Autorisation 401 requise
402 Paiement requis (pas encore utilisé)
403 Interdit
404 introuvable
Méthode 405 non autorisée
406 Non acceptable (encodage)
Authentification proxy 407 requise
Demande 408 expirée
409 Demande contradictoire
410 Disparu
411 Longueur du contenu requise
412 Échec de la condition préalable
413 Entité de requête trop longue
414 URI de demande trop long
415 Type de support non pris en charge
Erreurs de serveur
500 Erreur de serveur interne
501 Non mis en œuvre
502 Mauvaise passerelle
Service 503 indisponible
504 Délai d'expiration de la passerelle
505 Version HTTP non prise en charge
3 Protection par mot de passe Protection par mot de passe
Document officiel : Authentification, Autorisation et Contrôle d'accès
Supposons que le fichier de mot de passe soit .htpasswd
AuthUserFile /usr/local/safedir/.htpasswd (le nom de chemin complet doit être utilisé ici)
AuthName EnterPassword
Type d'authentification de base
Deux méthodes de vérification courantes :
Exiger l'utilisateurwindix
(Seul l'utilisateur Windix est autorisé à se connecter)
Exiger un utilisateur valide
(Tous les utilisateurs légaux peuvent se connecter)
Astuce : Comment générer un fichier de mots de passe à l'aide de la commande htpasswd (incluse avec Apache)
Un fichier de mots de passe doit être créé pour la première génération
htpasswd -c .htpasswd utilisateur1
Ajouter de nouveaux utilisateurs plus tard
htpasswd .htpasswd utilisateur2
4 Activation de SSI via htaccess Autoriser la fonction SSI (côté serveur inclus) via htaccess
AddType texte/html .shtml
.shtml analysé par le serveur AddHandler
Options Index FollowSymLinks Comprend
AnnuaireIndex index.shtml index.html
5 Blocage des utilisateurs par IP Blocage de l'accès des utilisateurs en fonction de l'IP
commande autoriser, refuser
refuser du 123.45.6.7
refuser à partir de 12.34.5 (adresse entière de classe C)
permettre à tous
6 Blocage des utilisateurs/sites par référent Blocage des utilisateurs/sites en fonction du référent
Nécessite le module mod_rewrite
Exemple 1. Blocage d'un seul référent : badsite.com
Réécrire le moteur activé
# Options + Suivre les liens symboliques
RewriteCond %{HTTP_REFERER} mauvaissite.com [NC]
RéécrireRule .* - [F]
Exemple 2. Bloquer plusieurs référents : badsite1.com, badsite2.com
Réécrire le moteur activé
# Options + Suivre les liens symboliques
RewriteCond %{HTTP_REFERER} badsite1.com [NC,OR]
RéécritureCond %{HTTP_REFERER} badsite2.com
RéécrireRule .* - [F]
[NC] – Insensible à la casse
[F] - 403 Interdit
Notez que l'instruction "Options + FollowSymlinks" est commentée dans le code ci-dessus. Si le serveur ne définit pas FollowSymLinks dans la section httpd.conf, vous devez ajouter cette phrase, sinon vous obtiendrez une erreur "500 Internal Server error".
7 Bloquer les mauvais robots et les rippers de sites (c'est-à-dire les navigateurs hors ligne) Bloquer les mauvais robots et les navigateurs hors ligne
Nécessite le module mod_rewrite
De mauvais robots ? Par exemple, certains robots qui récupèrent les adresses e-mail de spam et les robots qui ne respectent pas le fichier robots.txt (comme baidu ?)
Ils peuvent être jugés sur la base de HTTP_USER_AGENT
(Mais il y en a encore plus sans vergogne comme « Zhongsou zhongsou.com » qui a défini son propre agent sur « Mozilla/4.0 (compatible ; MSIE 5.5 ; Windows NT 5.0) ». Ils sont trop voyous et ne peuvent rien faire.)
Réécriture du moteur activé
RéécritureCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot mailto:[email protected] [OU]
RéécritureCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RéécritureCond %{HTTP_USER_AGENT} ^Custo [OR]
RéécritureCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Télécharger Démon [OU]
RéécritureCond %{HTTP_USER_AGENT} ^eCatch [OU]
RéécritureCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RéécritureCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RéécritureCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express WebPictures [OU]
RéécritureCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RéécritureCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RéécritureCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RéécritureCond %{HTTP_USER_AGENT} ^GetRight [OR]
RéécritureCond %{HTTP_USER_AGENT} ^GetWeb [OU]
RéécritureCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RéécritureCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RéécritureCond %{HTTP_USER_AGENT} ^Grafula [OR]
RéécritureCond %{HTTP_USER_AGENT} ^HMView [OR]
RéécritureCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image Stripper [OU]
RewriteCond %{HTTP_USER_AGENT} ^Image Sucker [OU]
RewriteCond %{HTTP_USER_AGENT} Indy Bibliothèque [NC,OR]
RéécritureCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet Ninja [OU]
RéécritureCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC Web Spider [OU]
RéécritureCond %{HTTP_USER_AGENT} ^larbin [OR]
RéécritureCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass Téléchargeur [OR]
Outil RewriteCond %{HTTP_USER_AGENT} ^MIDown [OR]
RewriteCond %{HTTP_USER_AGENT} ^Monsieur PiX [OR]
RéécritureCond %{HTTP_USER_AGENT} ^Navroad [OR]
RéécritureCond %{HTTP_USER_AGENT} ^NearSite [OR]
RéécritureCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RéécritureCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net Vampire [OU]
RéécritureCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RéécritureCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Hors ligne Explorateur [OR]
RewriteCond %{HTTP_USER_AGENT} ^Hors ligne Navigateur [OR]
RéécritureCond %{HTTP_USER_AGENT} ^PageGrabber [OU]
RewriteCond %{HTTP_USER_AGENT} ^Papa Photo [OR]
RéécritureCond %{HTTP_USER_AGENT} ^pavuk [OR]
RéécritureCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RéécritureCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RéécritureCond %{HTTP_USER_AGENT} ^ReGet [OR]
RéécritureCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RéécritureCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RéécritureCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RéécritureCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RéécritureCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RéécritureCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Téléportation Pro [OR]
RéécritureCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web Image Collecteur [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web Sucker [OU]
RéécritureCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RéécritureCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RéécritureCond %{HTTP_USER_AGENT} ^WebFetch [OU]
RewriteCond %{HTTP_USER_AGENT} ^WebGo EST [OU]
RéécritureCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RéécritureCond %{HTTP_USER_AGENT} ^WebReaper [OU]
RéécritureCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Site Web eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Site Web Quester [OR]
RéécritureCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RéécritureCond %{HTTP_USER_AGENT} ^WebWhacker [OU]
RéécritureCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RéécritureCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^Veuve [OR]
RéécritureCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon WebSpider [OU]
RéécritureCond %{HTTP_USER_AGENT} ^Zeus
RéécrireRule ^.* - [F,L]
[F] - 403 Interdit
[L] - ?
8 Changer votre page de répertoire par défaut Changer votre page de répertoire par défaut
DirectoryIndex index.html index.php index.cgi index.pl
9 Redirections
Fichier unique
Redirection /old_dir/old_file.html http://votresite.com/new_dir/new_file.html
répertoire entier
Redirection /old_dir http://votresite.com/new_dir
Effet : identique au déplacement du répertoire
http://votresite.com/old_dir -> http://votresite.com/new_dir
http://votresite.com/old_dir/dir1/test.html -> http://votresite.com/new_dir/dir1/test.html
Astuce : Solution au problème selon lequel la redirection ne peut pas rediriger lors de l'utilisation de l'annuaire utilisateur
Lorsque vous utilisez le répertoire utilisateur par défaut d'Apache, tel que http://mysite.com/~windix, et lorsque vous souhaitez effectuer une redirection vers http://mysite.com/~windix/jump, vous constaterez que la redirection suivante ne fonctionne pas travail:
Redirection/saut http://www.google.com
La bonne façon est de le changer en
Redirection /~windix/jump http://www.google.com
(source : Redirection .htaccess dans « Sites » ne redirigeant pas : pourquoi ?)
10 Empêcher l'affichage du fichier .htaccess Empêcher l'affichage du fichier .htaccess
commande autoriser, refuser
nier de tous
11 Ajout de types MIME Ajout de types MIME
Application AddType/x-shockwave-flash swf
Conseils : définir le type sur application/octet-stream vous invitera à télécharger
12 Empêcher les liens dynamiques d'images et d'autres types de fichiers Anti-liens dynamiques
Nécessite le module mod_rewrite
Réécrire le moteur activé
RéécritureCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www/.)?mydomain.com/.*$ [NC]
RewriteRule .(gif|jpg|js|css)$ - [F]
Analyse:
Si HTTP_REFERER n'est pas vide (la source est d'autres sites, non directement connectés) et si HTTP_REFERER ne commence pas par (www.)mondomaine.com (ignorer la casse [NC]) (la source n'est pas ce site)
Donne une erreur interdite 403 [F] pour tous les fichiers se terminant par .gif/.jpg/.js/.css
Vous pouvez également spécifier une réponse, car l'exemple suivant montre une image de remplacement
RéécrireRule .(gif|jpg)$ [R,L]
[R] - Redirection
[L] - Lien
13 Empêcher l'affichage de la liste des répertoires Empêcher l'affichage de la liste des répertoires
IndexIgnorer*
IndexIgnorer *.jpg *.gif
Conseils:
Autoriser l'affichage de la liste des répertoires : Options + Index
Désactiver l'affichage de la liste des prêtres : Options -Index
Afficher les informations d'invite : fichier d'en-tête HEADER, fichier de pied de page README