This page has been robot translated, sorry for typos if any. Original content here.

25 règles .htaccess que tout développeur Web doit connaître

Par sujet:


Файл-конфигуратор Apache-серверов .htaccess


Avant de commencer, j'attire votre attention sur le fait que l'utilisation abusive de .htaccess peut entraîner une baisse des performances de votre site. La règle principale: utiliser .htaccess pour implémenter une tâche particulière est seulement s'il n'y a pas d'autres options.

Assurez-vous d'avoir fait une copie de sauvegarde du fichier .htaccess d'origine pour votre site avant d'apporter des modifications. En outre, n'oubliez pas que la fonctionnalité des règles suivantes dépend des paramètres individuels de votre serveur Web, définis par l'hôte. Certaines directives peuvent être interdites et ne fonctionnent pas.

.htaccess (à partir de l'accès hypertexte en anglais) est un fichier de configuration supplémentaire pour le serveur Web Apache, ainsi que des serveurs similaires. Vous permet de spécifier un grand nombre de paramètres et d'autorisations supplémentaires pour le fonctionnement du serveur Web dans des répertoires distincts (dossiers), tels que l'accès géré aux répertoires, la réaffectation des types de fichiers, etc., sans modifier le fichier de configuration principal.

Le fichier .htaccess peut être placé dans n'importe quel répertoire . Les directives de ce fichier agissent sur tous les fichiers du répertoire en cours et dans tous ses sous-répertoires (sauf si ces directives sont remplacées par les directives des fichiers .htaccess sous-jacents).

Pour que ces fichiers .htaccess soient utilisables, la configuration appropriée du fichier de configuration principal est requise (la valeur de la directive AllowOverride doit être définie sur Tous ). En règle générale, la grande majorité des hôtes autorisent l'utilisation de leurs fichiers .htaccess.

1. Ne pas télécharger de fichiers à partir de sites externes

Êtes-vous fatigué des gens qui affichent des images publiées sur votre site - sur leurs ressources, dépensant ainsi votre trafic et créant un fardeau inutile sur votre hébergement? Ce code, placé à la fin de votre fichier .htaccess, empêchera le téléchargement de vos images - par des sites tiers.

	 Options + SuivezSymlinks
	 # Ne pas télécharger de fichiers à partir de sites externes
	 RewriteEngine On
	 RewriteCond% {HTTP_REFERER}! ^ $
	 RewriteCond% {HTTP_REFERER}! ^ Http: // (www.)? Site.com/ [nc]
	 RewriteRule. *. (Gif | jpg | png) $ http://site.com/stop.gif[nc] 

N'oubliez pas de changer site.com pour votre nom de domaine et créer une image stop.gif qui sera affichée à la place de l'image demandée.

2. Bloquer toutes les demandes d'agents utilisateurs indésirables

Cette règle vous permet de bloquer les User Agent indésirables, ce qui peut être potentiellement dangereux ou simplement surcharger le serveur avec des requêtes inutiles.

  # Bloquer les mauvais robots et robots
 SetEnvIfNoCase utilisateur-Agent ^ FrontPage [NC, OR]
 SetEnvIfNoCase utilisateur-Agent ^ Java. * [NC, OR]
 SetEnvIfNoCase utilisateur-Agent ^ Microsoft.URL [NC, OR]
 SetEnvIfNoCase user-Agent ^ MSFrontPage [NC, OR]
 SetEnvIfNoCase utilisateur-Agent ^ Offline.Explorer [NC, OR]
 SetEnvIfNoCase utilisateur-Agent ^ [Ww] eb [Bb] etit [NC, OR]
 SetEnvIfNoCase user-Agent ^ Zeus [NC]
 Ordre Autoriser, Refuser
 Permettre à tous
 Refuser d'env = bad_bot

Une liste des navigateurs des agents utilisateurs, des robots et des moteurs de recherche, des répertoires Web, des gestionnaires de téléchargement, des robots de spam et des bad bots peut être trouvée sur le site Web de la liste des agents utilisateurs.

3. Refuser l'accès pour tous sauf les adresses IP spécifiées

Si, pour une raison quelconque, vous voulez refuser tout le monde ou autoriser uniquement des adresses IP spécifiques à accéder à votre site, ajoutez ce code à votre fichier .htaccess:

	 # Refuser l'accès pour toutes les adresses IP sauf celles spécifiées
	 ErrorDocument 403 http://www.domainname.com
	 Commander refuser, autoriser
	 Refuser de tout
	 Autoriser de 124.34.48.165
	 Permettre de 102.54.68.123 

Ne pas oublier de changer domainname.com à votre nom de domaine.

4. Configuration de la redirection 301 SEO-friendly

Si vous avez déplacé le nom de domaine (ou votre sous-site) ou que vous souhaitez rediriger l'utilisateur vers une page spécifique (pages), sans la sanction des moteurs de recherche, utilisez ce code:

	 # Configurer la redirection SEO 301
	 Redirection 301 /1/file.html http://www.site.com/2/file.html 

N'oubliez pas de remplacer site.com par votre nom de domaine et /1/file.html et /2/file.html par les répertoires et les pages appropriés.

5. Créez nos propres pages d'erreur

Êtes-vous fatigué du type standard de pages d'erreur? Pas de problème - en utilisant le code suivant, vous pouvez facilement créer votre propre page et montrer à l'utilisateur exactement:

	 ErrorDocument 401 /error/401.php
	 ErrorDocument 403 /error/403.php
	 ErrorDocument 404 /error/404.php
	 ErrorDocument 500 /error/500.php 

<N'oubliez pas de créer le dossier d'erreur dans le répertoire racine de votre serveur et placez les fichiers appropriés dedans.

6. Créez une liste noire d'adresses IP

Fatigué des commentaires de spam ou d'un utilisateur spécifique? Il suffit de bloquer son adresse IP avec le code suivant, ajouté au fichier .htaccess.

	 # Créer une liste noire d'adresses IP
	 permettre à tous
	 refuser à partir de 145.186.14.122
	 refuser à partir de 124,15. 

Vous pouvez trouver les adresses IP des commentateurs dans les journaux Apache ou à l'aide des services de statistiques. De nombreux CMS ont leurs propres outils intégrés pour surveiller les adresses des visiteurs. Par exemple, dans Drupal, les adresses IP des commentateurs peuvent être consultées dans le panneau d'administration - Rapports.

7. Définissez l'adresse e-mail par défaut pour l'administrateur

Utilisez ce code pour définir l'adresse e-mail par défaut de l'administrateur du serveur.

	 # Définir l'adresse e-mail par défaut pour l'administrateur
	 ServerSignature EMail
	 SetEnv SERVER_ADMIN par défaut@domain.com 

N'oubliez pas de remplacer default@domain.com avec votre adresse e-mail.

8. Protéger un fichier spécifique

Le code suivant vous permet de refuser l'accès à n'importe quel fichier - une erreur 403 sera émise sur demande.Par exemple, j'ai fermé l'accès au fichier htaccess lui-même, augmentant ainsi le niveau de sécurité global du site.

  # Protéger le fichier .htaccess
 ordre autoriser, refuser
 nier de tous

9. Compresser les éléments avec mod_deflate

Comme alternative à la compression de fichiers avec Gzip, vous pouvez utiliser mod_deflate (il est censé fonctionner plus vite). Placez le code suivant au début de votre fichier .htaccess (vous pouvez également ajouter des énumérations .jpg | .gif | .png | .tiff | .ico):

  # Compresser les éléments avec mod_deflate
 SetOutputFilter DEFLATE

10. Ajout de la durée de vie aux en-têtes

Ce code vous permet d'ajouter des durées de vie aux en-têtes:

  # Ajouter la durée de vie aux en-têtes
 Header set Expires «mer., 21 mai 2010 20:00:00 GMT»

11. Définir les pages par défaut

Généralement, la page par défaut est index.html, mais avec ce code, vous pouvez configurer n'importe quelle autre page par défaut.

	 # Définir la page par défaut par défaut
	 DirectoryIndex about.html 

12. Mot de passe protéger les dossiers et les fichiers

Vous pouvez activer la vérification de mot de passe pour accéder à n'importe quel dossier ou fichier sur votre serveur en utilisant ce code:

  # fichier de protection par mot de passe
 AuthType Basic
 AuthName "Prompt"
 AuthUserFile /pub/home/.htpasswd
 Exiger un utilisateur valide
 # dossiers de protection par mot de passe
	 réside
	 AuthType basic
	 AuthName "Ce répertoire est protégé"
	 AuthUserFile /pub/home/.htpasswd
	 AuthGroupFile / dev / null
	 Exiger un utilisateur valide 

Pour organiser l'accès au fichier à l'aide d'un mot de passe, vous devez créer un fichier .htpasswd et ajouter une paire login-mot de passe au format user: password .

Cependant, dans ce cas, les mots de passe seront stockés sous une forme ouverte, ce qui n'est pas très bon du point de vue de la sécurité. Par conséquent, il est préférable de chiffrer le mot de passe. Pour ce faire, utilisez les services de génération d'enregistrements dans les fichiers .htpasswd. Par exemple, ici tel .

Dans notre exemple, le fichier avec les mots de passe d'accès se trouve dans le répertoire racine du site et s'appelle .htpasswd. Le répertoire est indiqué à la racine du serveur et si le chemin est incorrect - Apache, sans accès au fichier, refusera l'accès au dossier à tout utilisateur - dans le piment et celui qui a entré la paire de mots de passe correcte : mot de passe .

13. Redirection de l'ancien domaine vers un nouveau

En utilisant .htaccess, vous pouvez configurer la redirection de l'ancien nom de domaine vers le nouveau en ajoutant le code suivant:

	 # Redirection de l'ancien domaine old.com vers un nouveau
	 RewriteEngine On
	 RewriteRule ^ (. *) $ Http://www.new.com/$1 [R = 301, L] 

La redirection est utilisée si vous déplacez votre site existant vers un nouveau nom de domaine. Dans ce cas, tout utilisateur qui se connecte dans la barre d'adresse de www.old.com sera redirigé vers www.new.com.

14. Renforcer la mise en cache

Utiliser cette règle ne signifie pas directement accélérer le chargement de votre site. Il est destiné à accélérer le chargement d'un site - pour un visiteur qui l'a déjà visité, en envoyant le statut 304 pour les éléments qui n'ont pas été mis à jour.

  # Renforce la mise en cache
 FileETag MTime Taille
 ExpiresActive sur
 ExpiresDefault "accès plus 1 année"

Ainsi, lorsque la page est rechargée, le navigateur du visiteur ne téléchargera pas à nouveau d'images, de scripts ou de CSS, mais produira les fichiers qui sont déjà stockés dans son cache. Vous pouvez modifier la durée de vie du cache en ajustant sa valeur en années, en mois ou, par exemple, en secondes. Dans l'exemple, 1 an est indiqué.

15. Compresser les composants du site en incluant Gzip

Si vous utilisez Gzip , le serveur compressera les fichiers avant de les envoyer à l'utilisateur, ce qui accélérera le chargement de votre site.

	 # Compresser les composants du site en incluant Gzip
	 AddOutputFilterByType DEFLATE text / html text / plain ..
	 .. texte / application xml / application xml / xhtml + xml .. 
	 .. texte / texte javascript / application css / x-javascript
	 NavigateurMatch ^ Mozilla / 4 gzip-only-text / html
	 BrowserMatch ^ Mozilla / 4.0 [678] no-gzip
	 BrowserMatch bMSIE! Pas de gzip! Gzip-only-text / html 

Notez que l'inclusion de la compression entraînera une charge plus importante sur le processeur du serveur. Ici, la ligne AddOutputFilterByType est écrite en une longue ligne avec deux lignes inférieures (toutes les lignes doivent être supprimées).

16. Supprimer la "catégorie" de l'URL

Pour changer yourdomain.com/category/blue en votredomaine.com/blue , il suffit d'ajouter le code suivant à la fin de votre fichier .htaccess .

	 # Supprimer la catégorie de l'URL
	 RewriteRule ^ category /(.+)$ http://www.site.com/$1 [R = 301, L] 

N'oubliez pas de changer www.site.com pour votre nom de domaine.

17. Nous interdisons de voir le contenu d'un dossier

Afin de restreindre l'accès aux répertoires pouvant contenir une variété d'informations et d'assurer la sécurité du serveur, ajoutez ce code au fichier .htaccess

	 # Ne pas afficher le contenu d'un dossier
	 Options Tous -Indexes 

18. Redirection de votre flux RSS vers FeedBurner

Montrons comment cela peut être fait en utilisant l'exemple du flux RSS de Drupal pour le service Google Feedburner.

  # Transférer le flux RSS à Drupal sur FeedBurner
 RewriteEngine sur
 RewriteCond% {HTTP_USER_AGENT}! FeedBurner [NC]
 RewriteCond% {HTTP_USER_AGENT}! FeedValidator [NC]
 RewriteRule ^ rss.xml $ http://feeds.feedburner.com/yourfeed [R = 302, NC, L]

Au départ, vous devez enregistrer un flux pour votre blog dans le service Feedburner . Ensuite, n'oubliez pas de remplacer votre flux avec le nom de votre bande déjà dans Feedburner.

19. Nous interdisons les commentaires des utilisateurs sans référent

Le plus souvent, les robots de spam se réfèrent directement au fichier de commentaires, par exemple à wp-comments-post.php , sans aller aux pages de vos entrées de blog. Le code ci-dessous vous permet de bloquer les commentaires envoyés par des utilisateurs «sortis de nulle part», ce qui vous permet de ne commenter que les lecteurs qui ont accédé à votre blog à partir d'autres pages (par exemple, les résultats de recherche Google).

	 # Nous interdisons les commentaires des utilisateurs sans référent
	 RewriteEngine On
	 RewriteCond% {REQUEST_METHOD} POST
	 RewriteCond% {REQUEST_URI} .comment \ / reply \ / *
	 RewriteCond% {HTTP_REFERER} !. * Yourblog.com. * [OR]
	 RewriteCond% {HTTP_USER_AGENT} ^ $
	 RewriteRule (. *) ^ Http: //% {REMOTE_ADDR} / $ [R = 301, L] 

N'oubliez pas de remplacer yourblog.com par le nom de domaine de votre blog.

20. Supprimez l'extension de fichier de l'URL

Ce code vous permet de supprimer l'extension du fichier .php (vous pouvez le changer en un autre, par exemple - .html) à partir des URL des pages.

	 # Supprimer l'extension de fichier de l'URL
	 RewriteRule ^ (([^ /] + /) * [^.] +) $ /$1.php [L] 

21. Nous protégeons le site

Ce code protège le site contre l'envoi de scripts et les modifications indésirables de _REQUEST et / ou GLOBALS:

  # Activer le suivi Simlink
 Options + SuivezSymLinks
 # Exécuter url_rewriting
 RewriteEngine On
 # Nous bloquons tous les liens qui contiennent <script>
 RewriteCond% {QUERY_STRING} (\ <|% 3C). * Script. * (\> |% 3E) [NC, OR]
	 # Nous bloquons tous les scripts qui essayent de changer les variables de PHP Globals:
	 RewriteCond% {QUERY_STRING} GLOBALS (= | \ [| \% [0-9A-Z] {0,2}) [OR]
	 # Nous bloquons tous les scripts qui tentent de changer la variable _REQUEST:
	 RewriteCond% {QUERY_STRING} _REQUEST (= | \ [| \% [0-9A-Z] {0,2})
	 # Nous redirigeons tous similaires sur la page avec une erreur 403 - il est interdit
	 RewriteRule ^ (. *) $ Index.php [F, L] 

22. Redirigez le visiteur avec la directive RedirectMatch et les expressions régulières

Une autre directive utile recommandée est RedirectMatch . Citation: "Cette directive vous permet d'utiliser l' expression régulière (le transfert n'est pas" du document "mais" de tous les documents, tels que ... ") que l'adresse demandée. Redirection externe - le navigateur est informé de la nécessité de télécharger une autre page.

Syntaxe:

	 RedirectMatch [status] URL regexp 

Les valeurs d'état (code de retour du serveur Web) sont standard:

permanent (301 - redirection permanente), temp (302 - redirection temporaire, reviens), voir (303 - voler là, il ya beaucoup de savoureux), parti (410 - supprimé définitivement).

Exemple:

La même redirection de l'ancien domaine vers le nouveau sans connecter RewriteEngine:

	 RedirectMatch 301 ^ (. *) $ Www.domainname.com/$1 

De mon côté, j'ajouterai que vous pouvez utiliser non seulement les statuts http , mais aussi d'autres conditions:

	 RedirectMatch (. *) \. Gif $ http: //www.myserver.com$1.png
	 RedirectMatch (. * \. Jpg) $ http: //www.myanother.com$1 

Assurez-vous de faire une copie de sauvegarde du fichier .htaccess avant de faire des changements et de vérifier les fonctionnalités de l'ensemble du site - après avoir ajouté de nouvelles lignes.

23. Protection contre les liens directs pour les images via .htaccess

Hotlink - insérez des liens directs d'images ou de fichiers d'un site à un autre. Cette méthode est utilisée assez souvent, par exemple, vous n'avez pas assez d'espace sur votre serveur pour stocker des images et vous utilisez un service gratuit pour stocker des fichiers d'image, par exemple. téléchargez une image, obtenez une URL et collez-la sur votre site.

En fin de compte: vous économisez de l'espace pour votre site et utilisez l'hébergement de bande passante pour les photos, mais ce n'est plus votre affaire. Mais voici comment être, si quelqu'un a décidé que votre site peut être utilisé comme un service similaire.

Comment ne pas devenir un fournisseur gratuit d'images et de fichiers?

Y a-t-il une protection contre cela? Oui, il y en a! Pour empêcher d'autres sites d'utiliser votre trafic et / ou de simplement signaler les liens directs vers vos fichiers (images), ajoutez les lignes suivantes à votre fichier .htaccess :

	 # Empêcher d'autres sites d'utiliser des liens directs vers vos images
	 RewriteCond% {HTTP_REFERER}! ^ $
	 # Prochaine liste de domaines autorisés
	 RewriteCond% {HTTP_REFERER}! ^ Http (s) ?: // (www.)? Sitename.ru. * $ [NC]
	 RewriteCond% {HTTP_REFERER}! ^ Http (s) ?: // (www.)? Sitename.ru: 80. * $ [NC]
	 # Site IP (domaine)
	 RewriteCond% {HTTP_REFERER}! ^ Http (s)?: //111.111.111.111.*$ [NC]
	 RewriteCond% {HTTP_REFERER}! ^ Http (s)?: //111.111.111.111: 80. * $ [NC]
	 RewriteCond% {HTTP_REFERER}! ^ Http (s)?: // (www.)? Yandex.ru [NC]
	 RewriteCond% {HTTP_REFERER}! ^ Http (s) ?: // (www.)? Google.  [NC]
	 # RewriteCond% {HTTP_REFERER}! ^ Http (s)?: // (www.)? Site compatible avec le domaine. [NC]
	 RewriteCond% {HTTP_REFERER}! Recherche? Q = cache [NC]
	 # Formats de fichier pour lesquels la protection est installée
	 # Affiche l'erreur 403
	 # RewriteRule \. (Jpe? G | bmp | gif | png | css | mov | swf | dcr | exe | rar | avi | vob | zip | pdf | txt | doc | flv | mp3 | mp4) $ - [NC, F, L]
	 # ou montre les artistes spéciaux au lieu de l'spécifié
	 RewriteRule. * \. (Jpe? G | bmp | gif | png) $ fichiers / images / nohotlink.jpg [NC, L] 

En conséquence, tous les autres sites recevront une erreur 403 Interdit (c'est-à-dire que l' accès est refusé ) et votre bande passante est plus "ne fonctionne pas pour les autres".

24. ImageCache et protection contre les hotlinks via .htaccess

Pour ImageCache, l' élément précédent ne fonctionne pas, ajoutez les paramètres suivants:

  SetEnvIfNoCase Referer "^ $" local_ref = 1
 # Domaines autorisés
 # Puis les domaines autorisés
 SetEnvIfNoCase Referer "^ http: // (www \.)? Domaine \ .ru" local_ref = 1
 SetEnvIfNoCase Referer "^ http: // (www \.)? Domaine \ .com" local_ref = 1
 # Les extensions de fichier que vous souhaitez protéger
 # Extensions de fichiers à protéger
 Ordre Autoriser, Refuser
 Autoriser env = local_ref

Maintenant, nous avons à la fois la protection hotlink et le module ImageCache - ils fonctionnent parfaitement ensemble. Un "mais" - de telle sorte que vous le voyez, il ne sera pas possible de donner une autre image; seulement la protection de leurs images, ce qui est l'objectif principal.