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

Fichier .htaccess du configurateur de serveur Apache

Par sujet:


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


.htaccess (avec un point au début du nom) est un fichier de configuration du serveur Apache qui vous permet de configurer le serveur pour qu'il fonctionne dans des répertoires (dossiers) distincts sans donner accès au fichier de configuration principal. Par exemple, définissez les autorisations sur les fichiers d'un répertoire, modifiez les noms des fichiers d'index, gérez indépendamment les erreurs Apache et redirigez les visiteurs vers des pages d'erreur spéciales. .htaccess est un document en texte brut dont l'extension est htaccess. Ce fichier se trouve généralement à la racine du site, mais vous pouvez également créer des fichiers .htaccess supplémentaires pour différents répertoires de votre site.

Mod_rewrite est un module utilisé par les serveurs Web pour convertir les URL.

Directives du module Mod_rewrite

  • Rewritebase
  • RewriteCond
  • Réécrire Moteur
  • Réécrire
  • Rewritelog
  • RewriteLogLevel
  • Rewritemap
  • RewriteOptions
  • Reriterite

Options pour la mise en œuvre de la redirection à l'aide du fichier .htaccess

  1. Redirection simple:
      Redirect 301 / http://www.domainname.ru/
    
    ou
      redirection / secret http://www.site.ru/nosecret
    
    Placez un fichier .htaccess ou httpd.conf pour Apache. Le premier "/" signifie que tout ce qui se trouve au plus haut niveau du site, y compris tous les sous-répertoires, sera redirigé (n'oubliez pas de mettre le dernier "/"). Si vous souhaitez rediriger uniquement la page, en enregistrant le PR de l'ancienne page, procédez comme suit:

    Redirect 301 /old/old.htm http://www.you.ru/new.htm où:
    /old/old.htm - le chemin et le nom de l'ancienne page
    http://www.you.com/new.htm - nouveau chemin et nouveau nom de la page déplacée

  2. Redirige vers n'importe quelle page par l'adresse IP de l'utilisateur ou lors de la demande d'une page spécifique (ainsi que par le masque de nom).
    Si l'utilisateur a l'adresse IP 192.152.37.125, il sera alors redirigé vers la page user.php:
      SetEnvIf REMOTE_ADDR 192.152.37.125 REDIR = "redir"
     RewriteCond% {REDIR} redir
     RewriteRule ^ / $ /user.php
    
  3. Rediriger lors de la demande de certains fichiers. Si des fichiers dont l'extension n'est pas spécifiée dans le fichier .htaccess (gif et jpg) sont demandés, la redirection est la suivante:
      RewriteEngine On
     RewriteRule!. (Gif | jpg) $ index.php
    

  4. En utilisant mod_rewrite:
      Options + SuivreSymLiens 
     RewriteEngine on 
     RewriteCond% {HTTP_HOST} ^ votredomaine \ .ru 
     RewriteRule ^ (. *) $ Http://www.votdomain.ru/$1 [R = permanent, L]
    

  5. Redirection d'expression régulière:
      RedirectMatch 301 (. *) Http: //www.votredomaine.ru$1 Il est enregistré dans le fichier .htaccess. 
    
    (. *) RedirectMatch correspond en fait aux modèles d’expression régulière après le nom de domaine. Ainsi, il est impossible d’effectuer le filtrage sur ^ / votredomaine.ru. Toutefois, vous pouvez convertir des pages utilisant l’extension .html en fichiers du même nom, mais avec l’extension .php:
      RedirectMatch 301 (. *) \. Html $ http: //www.votredomaine.ru$1.php
    
    Si vous devez effectuer une redirection différente pour des pages individuelles, vous pouvez utiliser les éléments suivants:
      RedirectMatch Permanent ^ / html / resources.html $ http://www.newdomain.com/resources.php 
     RedirectMatch Permanent ^ / html / other_page.html $ http://www.newdomain.com/other_page.php 
     RedirectMatch Permanent ^ / (. *) $ Http://www.newdomain.com/ 
    
    " RedirectMatch Permanent " est l'équivalent de "RedirectMatch 301", la ligne avec "* (Wildcard)" devrait être la dernière de cette liste.

  6. Création d'URL faciles à lire
    Pour convertir, par exemple, www.site.ru/product.php?id=123 en www.site.ru/product/123, comme suit:
      RewriteEngine on
     RewriteRule ^ produit / ((//) / produit product.php? Id = 1 $ [L]
    
    Dans l'exemple suivant, convertissez www.site.ru/script.php?product=123 en www.site.ru/cat/product/123/:
      RewriteRule cat /(.*)/(.*)/$ /script.php?$1=$2
    

  7. Rediriger vers PHP:
      en-tête ("HTTP / 1.1 301 déplacé de façon permanente"); 
     en-tête ("Emplacement: http://www.newdomain.ru/newdir/newpage.htm"); 
     sortie (); 
    
    Naturellement, il est nécessaire de créer une page pour accéder à la redirection et de la placer sur le serveur. Et mieux spécifier HTTP / 1.1 (et pas HTTP / 1.0 ou HTTP / 0.9, qui ne supporte pas l'hébergement virtuel)

  8. Redirige tous les fichiers d'un dossier vers un fichier.
    Par exemple, vous n'avez plus besoin de la section Site Super Discount et souhaitez rediriger toutes les demandes du dossier / superdiscount vers un fichier /hot-offers.php. Pour ce faire, ajoutez le code suivant à .htaccess.
      RewriteRule ^ superdiscount (. *) $ / Hot -offers.php [L, R = 301]
    

  9. Rediriger le dossier entier sauf un fichier
    Dans l'exemple suivant, tous les fichiers du dossier / superdiscount seront redirigés vers le fichier /hot-offers.php, SAUF le fichier /superdiscount/my-ebook.html, qui devrait être redirigé vers /hot-to-make-million.html.
      RewriteRule ^ superdiscount / my-ebook.html /hot-to-make-million.html [L, R = 301]
     RewriteRule ^ superdiscount (. *) $ / Hot -offers.php [L, R = 301]
    

  10. Rediriger l'URL dynamique vers un nouveau fichier.
    Cette option est utile si vous souhaitez rediriger une URL dynamique avec des paramètres vers un nouveau fichier statique.
      RewriteRule ^ article.jsp? Id = (. *) $ /Latestnews.htm [L, R = 301]
    
    C’est-à-dire qu’une demande de fichier de type http://www.kass.ws/article.jsp?id=8632 et / ou http://www.kass.ws/article.jsp?id=1245 sera envoyée au fichier http : //www.kass.ws/latestnews.htm.

  11. Redirection en masse de nouveaux fichiers.
    Passons maintenant au moment le plus difficile où vous devez rediriger de nombreuses URL, par exemple, après avoir modifié votre CMS. Ici, un certain nombre de problèmes se posent immédiatement. Tout d’abord, l’ajout de toutes les adresses modifiées au fichier .htaccess prendra très longtemps et le travail très désagréable lui-même. Deuxièmement, trop d'entrées dans le fichier .htaccess ralentiront le serveur Apache. Et troisièmement, si vous entrez une telle quantité d'informations, il est fort probable que vous iriez ailleurs. Par conséquent, la meilleure solution consiste à engager un programmeur qui vous écrira une redirection dynamique.
    L'exemple suivant est écrit en PHP, mais peut également être exécuté dans n'importe quel langage. Supposons que vous ayez basculé vers un nouveau système de liens sur votre site et que tous les fichiers se terminant par l'ancien identifiant soient mélangés. Nous créons d’abord dans la base de données une table contenant l’ancien ID et la nouvelle URL de la redirection. old_id INT new_url VARCHAR (255) Ensuite, écrivez le code qui lie votre ancien identifiant aux nouvelles URL.
    Après cela, ajoutez la ligne suivante à .htaccess:
      RewriteRule ^ / product - (. *) _ ([0-9] +). Php /redoldold.php?productid=$2
    
    puis créez un fichier PHP redirectold.php qui supportera les redirections 301:
      <? php
     fonction getRedirectUrl ($ productid) {
     // Se connecter à la base de données
     $ dServer = "localhost";
     $ dDb = "mydbname";
     $ dUser = "mydb_user";
     $ dPass = "mot de passe";
    
     $ s = @mysql_connect ($ dServer, $ dUser, $ dPass)
     ou mourir ("Impossible de se connecter au serveur de base de données");
    
     @mysql_select_db ($ dDb, $ s)
     ou mourir ("Impossible de se connecter à la base de données");
    
     $ query = "SELECT new_url FROM redirige WHERE old_id =".  $ productid;
     mysql_query ($ query);
     $ result = mysql_query ($ query);
     $ hasRecords = mysql_num_rows ($ result) == 0?  faux: vrai;
     si (! $ hasRecords) {
     $ ret = 'http://www.yoursite.com/';
     } else {
     while ($ row = mysql_fetch_array ($ result))
     {
     $ ret = 'http://www.yoursite.com/'.  $ row ["new_url"];
     }
     }
     mysql_close ($ s);
     return $ ret;
     }
    
     $ productid = $ _GET ["productid"];
     $ url = getRedirectUrl ($ productid);
    
     en-tête ("HTTP / 1.1 301 déplacé de façon permanente");
     en-tête ("Emplacement: $ url");
     sortie ();
     ?>
    

    Désormais, toutes les demandes adressées à vos anciennes URL appellent redirectold.php, qui trouvera la nouvelle URL et renverra 301 réponses avec votre nouveau lien.

    Redirige en fonction du temps

    Lorsqu'il est nécessaire d'utiliser des astuces telles que le contenu d'une masse de webmasters dépendant du temps, ils utilisent toujours des scripts CGI qui redirigent vers des pages spéciales. Comment cela peut-il être fait via mod_rewrite?

    Il existe de nombreuses variables appelées TIME_xxx pour les conditions de redirection. En conjonction avec des échantillons lexicographiques spéciaux à des fins de comparaison STRING et = STRING nous pouvons produire des redirections dépendantes du temps:
     
      RewriteEngine on RewriteCond% {TIME_HOUR}% {TIME_MIN}> 0700 RewriteCond% {TIME_HOUR}% {TIME_MIN} <1900 RewriteRule ^ foo \ .html $ foo.day.html RewriteRule ^ foo \ .html $ foo.night 

    Cela donne le contenu de foo.day.html lors de la demande de l'URL foo.html de 07h00 à 19h00 et pour le reste du temps, le contenu de foo.night.html.


  12. Nous supprimons toutes les demandes du début, "WWW".
     RewriteEngine on # annonce que nous voulons utiliser mod_rewrite
     RewriteCond% {HTTP_HOST} ^ www \. (. *) [NC]
     RewriteRule ^ /? (. *) Http: //% 1 / $ 1 [L, R = permanent]
    

  13. Remplacez l'extension .html par .php
    Il arrive parfois que vous ayez un site Web statique et que vous deviez exécuter un script php dessus. Pour ce faire, vous devez indiquer au serveur de traiter cette page en tant que fichier php.
     AddHandler application / x-httpd-php .html
    
    Cette technique peut également être utilisée pour d'autres extensions de fichiers:
     AddHandler application / x-httpd-php .xml
     Application AddHandler / x-httpd-php .asp
    

Refuser l'accès à un répertoire spécifique

  1. pour tout à tous les fichiers d'un répertoire:
      nier de tout
    
  2. vers un fichier spécifique:
     nier de tout
    
  3. par utilisateur ip:
      ordre nier, permettre
     nier de tout
     autoriser à partir de 192.152.37.125
    
    L'accès à ce répertoire sera autorisé uniquement aux utilisateurs possédant l'adresse IP 192.152.37.125.

    Et si vous voulez le contraire, pour interdire aux utilisateurs d'IP individuels d'accéder à votre site, nous écrirons les lignes suivantes:

     ordre permet, nie
     permettre à tous
     refuser de 192.152.37.125
     refuser à partir de 123.456.177
    
  4. Directive Options -Indexes - Interdiction d'afficher le contenu d'un répertoire en l'absence d'un fichier d'index Parfois, vous devez vous assurer que, s'il n'y a aucun fichier dans le répertoire affiché par défaut, aucune liste de fichiers du répertoire ne sera affichée. Ensuite, vous pouvez ajouter cette ligne à .htaccess:
      Options -Indexes
    
    Dans ce cas, au lieu d'une liste de fichiers du répertoire, le visiteur recevra une erreur HTTP 403 - accès interdit.
  5. Refuser l'accès aux fichiers avec plusieurs types d'extensions
     nier de tout
    
    Accès refusé aux fichiers portant les extensions * .inc, * .conf et * .cfg. Bien que la directive, par défaut, ne fonctionne pas avec les expressions régulières, vous pouvez les activer en plaçant le caractère tilde (~) dans les options de la directive. La syntaxe est la suivante: [tilde] [espace] [Further_all_non_there] Pour bloquer cet accès, nous écrivons ce qui suit:
      RewriteRule ^ .htaccess $ - [F]
    
    Cette règle se traduit par:
    Si quelqu'un tente d'accéder au fichier .htaccess, le système doit générer le code d'erreur "Réponse HTTP de 403" ou "Interdit 403 - cela ne permet pas d'accéder à /.htaccess sur ce serveur".

    La construction de ^ .htaccess $ dans cette expression régulière signifie:
    ^ - ligne de départ d'ancrage
    $ - ancre de fin de ligne
    . - dans les expressions régulières un point '.' indique un méta-symbole et doit être protégé par une barre oblique inverse si vous souhaitez toujours utiliser le point réel.

    Le nom du fichier doit être situé exactement entre l'ancre initiale et finale. Cela garantira que seul ce nom de fichier spécifique et aucun autre ne générera un code d'erreur.
    [F] - drapeau spécial d'interdiction (interdit).
    [NC] - ignorer la casse des lettres.
    [OU] - signifie 'ou la condition suivante'.

Définition d'encodage

Déterminer l'encodage dans lequel le serveur "donne" des fichiers

  AddDefaultCharset Windows-1251
Options: KOI8-R , UTF-8 , Windows-1251

Définition de l'encodage pour les fichiers téléchargeables

  CharsetSourceEnc windows-1251

Définition d'un mot de passe pour un répertoire à l'aide de .htaccess

Pour définir un mot de passe pour un répertoire, vous pouvez utiliser le système d'autorisation de base fourni dans le serveur Web Apache. Créez dans le répertoire auquel vous souhaitez restreindre l'accès par mot de passe, un fichier .htaccess avec les directives suivantes:
  AuthType Basic
 AuthName "Un Nom"
 AuthUserFile /www/some_login/www/htdocs/some_dir/.htpasswd
 nécessite un utilisateur valide
Le chemin /www/some_login/www/htdocs/some_dir/.htpasswd représente le chemin complet du fichier de mots de passe sur le disque de notre serveur. Si, par exemple, vous placez le fichier .htpasswd (il y aura des mots de passe) dans votre répertoire de base, où vous vous connectez au serveur via FTP, le chemin d'accès à ce fichier ressemblera à /www/some_login/www/htdocs/some_dir/.htpasswd. où some_login est votre identifiant. Dans la directive AuthUserFile, spécifiez le chemin absolu du fichier avec les identifiants de connexion / mots de passe, que nous créerons un peu plus tard. Si vous créez un fichier .htaccess sur votre ordinateur, et non immédiatement sur le serveur à l'aide d'un éditeur de texte, faites particulièrement attention au fait que le fichier .htaccess doit être transféré via FTP strictement en mode texte (ASCII).

Créez un fichier de mot de passe. Le fichier de mot de passe doit contenir des lignes de la forme login: mot de passe. Le mot de passe doit être crypté à l'aide de l'algorithme MD5. Un moyen de créer un tel fichier est d'utiliser le programme inclus dans la distribution Apache - htpasswd (sur notre serveur, il se trouve dans le répertoire / usr / local / apache / bin, le chemin complet est / usr / local / apache / bin / htpasswd).

Déterminez comment créer un fichier de mot de passe dans un shell directement sur le serveur. Accédez au shell et exécutez les commandes suivantes:

  htpasswd -mbc .htpasswd user1 7B1safkir
- créez un nouveau fichier .htpasswd, dans lequel nous ajoutons une entrée pour utilisateur1 avec le mot de passe spécifié sur la ligne de commande.
  htpasswd .htpasswd user2
- Ajoutez l'utilisateur2 utilisateur2 au fichier .htpasswd existant et entrez manuellement le mot de passe en réponse à la demande de programme correspondante.

Après la fin de l’institution, toutes les connexions doivent télécharger le fichier sur le serveur. A propos d'autres moyens de définir des mots de passe sur la page

Définissez vos propres pages d'erreur

Vous pouvez définir votre propre page d'erreur comme suit:
  ErrorDocument 404 http://www.site.ru/404.php
Internet Explorer ignore les pages de moins de 512 octets.

Indexation des répertoires et des sous-répertoires

Pour éviter l'indexation des répertoires et des sous-répertoires par les moteurs de recherche, il est nécessaire de prescrire une telle chaîne, par exemple:
  DirectoryIndex index.php
Cette directive spécifie le fichier qui sera appelé lors de l'accès au répertoire sans spécifier le nom du fichier.

Vous pouvez spécifier plusieurs pages d'index. Lorsqu'un répertoire est demandé, leur recherche sera effectuée dans l'ordre indiqué dans la directive DirectoryIndex. Si le fichier index.html n'est pas trouvé, le fichier index.php, etc. sera recherché.

  DirectoryIndex index.html index.php index.shtml

Personnellement, je préfère rediriger des répertoires vides vers la page principale du site ou vers toute autre page appropriée. Par exemple, le répertoire www.site.ru/pic/ peut être redirigé vers www.site.ru.

Protéger les images du téléchargement

Il arrive souvent que des webmasters copient de manière effrontée le contenu de votre site avec des images, lesquelles sont ensuite téléchargées à partir de votre propre serveur. Cela crée du trafic supplémentaire, ce qui entraîne souvent un certain nombre de problèmes. Comment se protéger contre ces webmasters et ne pas empêcher les moteurs de recherche d’indexer les images? C'est simple:
  RewriteEngine on
 RewriteCond% {HTTP_REFERER}.
 RewriteCond% {HTTP_REFERER}! ^ Http: // ([^.] + \.)? Site \.  [NC]
 RewriteCond% {HTTP_REFERER}! Google \.  [NC]
 RewriteCond% {HTTP_REFERER}! Search \? Q = cache [NC]
 RewriteCond% {HTTP_REFERER}! Msn \.  [NC]
 RewriteCond% {HTTP_REFERER}! Yahoo \.  [NC]
 RewriteCond% {REQUEST_URI}! ^ / Hotlinker \ .gif $
 RewriteRule \. (Gif | jpg | png) $ /hotlinker.gif [NC, L]
hotlinker.gif - L'image qui sera affichée à la place des vraies images. Je recommande dans cette image d'afficher votre logo et un lien vers votre site.

Un autre moyen d'interdire l'accès aux images de sites non résolus:

  SetEnvIfNoCase Referer "^ $" local_ref = 1
 SetEnvIfNoCase Referer "^ http: // (www \.)? Htmlweb \ .ru" local_ref = 1
 SetEnvIfNoCase Referer "^ http: // (www \.)? Images \ .yandex \ .ru" local_ref = 1
 SetEnvIfNoCase Referer "^ http: // (www \.)? Hghltd \ .yandex \ .com" local_ref = 1
 Ordre Autoriser, Refuser
  Autoriser à partir d'env = local_ref

Les moteurs de recherche et toutes sortes de robots génèrent un trafic énorme sur votre site. Le bloc de code suivant permettra l'accès aux robots sur le site.

  RewriteCond% {HTTP_USER_AGENT} (Googlebot | Slurp | spider | Twiceler | heritrix |
	 Combinez | appie | boitho | e-SocietyRobot | Exabot | Nutch | OmniExplorer |
	 MJ12bot | ZyBorg / 1 | Ask \ Jeeves | AskJeeves | ActiveTouristBot |
	 JemmaTheTourist |  agadine3 | DevenirBot | Clustered-Search-Bot |
	 MSIECrawler | freefind | galaxy | genieknows | INGRID | client grub |
	 MojeekBot | NaverBot | NetNose-Crawler | OnetSzukaj | PrassoSunner |
	 Asterias \ Crawler | THUNDERSTONE | GeorgeTheTouristBot |
	 VoilaBot | Vagabondo | fantomBro wser | stealthBrowser | cloakBrowser |
	 fantomCrew \ Browser | Girafabot | Indy \ Bibliothèque | Intelliseek | Zealbot |
	 Windows \ 95 | ^ Mozilla / 4 \ .05 \ \ [en \] $ | ^ Mozilla / 4 \ .0 $) [NC]
 RewriteRule ^ (. *) $ - [F]
 #
 RewriteCond% {HTTP_USER_AGENT} ^ Mozilla. * [NC, OR]
 RewriteCond% {HTTP_USER_AGENT} ^ Opera. * [NC, OR]
 RewriteCond% {HTTP_USER_AGENT} ^ Firefox. * [NC, OR]
 RewriteCond% {HTTP_USER_AGENT} ^ Netscape. * [NC]
 RewriteRule ^ (. *) $ - [L]
 RewriteRule ^ (. *) $ - [F]

Suivi de l'accès au fichier robots.txt

Pour avoir plus d'informations sur les moteurs de recherche en visite, il est utile de disposer d'informations détaillées sur l'accès au fichier robots.txt. Pour organiser cela, les entrées suivantes doivent figurer dans '.htaccess':
  RewriteEngine on
  Options + SuivreSymlinks
  RewriteBase /
  RewriteRule ^ robots.txt $ /robot.php?%{REQUEST_URI}
Désormais, lors de la demande du fichier 'robots.txt', notre RewriteRule redirige le visiteur (robot) vers les demandes de traitement de script robot.php. En outre, la variable est transmise au script, qui sera traité en fonction de vos besoins. 'REQUEST_URI' définit le nom du fichier demandé. Dans cet exemple, il s'agit de "robots.txt". Le script lira le contenu de 'robots.txt' et l'enverra à un navigateur Web ou à un bot de moteur de recherche. Ainsi, nous pouvons compter les visites des visiteurs et conserver les fichiers journaux.

PHPSESSID

Pour désactiver l'ajout de PHPSESSID à une URL, insérez index.php au début:

  ini_set ("session.use_trans_sid", 0);

Ou dans la liste .htaccess:

  php_flag session.use_trans_sid Off

Si tout vous semble difficile, utilisez le ready-made URL dynamique vers le service statique avec htaccess

Directives de mise en cache

Mise en cache pour tous les types de fichiers par temps d'accès
  ExpiresActif sur
 ExpiresDefault "accès plus 600 secondes"
Mise en cache pour tous les types de fichiers au moment du changement
  ExpiresActif sur
 ExpiresDefault "modification plus 600 secondes"
Mise en cache pour certains types de fichiers
  ExpiresByType text / css "modification plus 600 secondes"
 ExpiresByType image / jpeg "modification plus 600 secondes"
 ExpiresByType image / gif "modification plus 600 secondes"
 ExpiresByType image / x-ico "modification plus 600 secondes"
 ExpiresByType image / png "modification plus 600 secondes"

Désactiver la mise en cache avec Apache

Ouvrez le fichier de configuration du serveur Apache httpd.conf et décommentez les lignes suivantes:

 LoadModule expires_module modules / mod_expires.so
 LoadModule headers_module modules / mod_headers.so 
 ...
 AddModule mod_expires.c
 AddModule mod_headers.c

Entrez ce qui suit dans .htaccess:

  # Interdiction de la mise en cache dans ce dossier
 # Il est nécessaire d'activer les modules
 # mod_headers.c et mod_expires.c
 #
 # Contrôle de cache d'en-tête
 En-tête annexe Cache-Control "no-store, no-cache, must-revalidate"
 # Expires en-tête
 Expires Actif sur
 ExpiresDefault "maintenant"

Les en-têtes nécessaires seront automatiquement transmis, et vous n'avez plus besoin de les écrire spécifiquement en PHP - le cache est déjà désactivé!

Cache-control cache Description de l'entête http

Mise en cache avec le fichier .htaccess

  # Activer la mise en cache dans ce dossier
 # Il est nécessaire d'activer les modules
 # mod_headers.c et mod_expires.c
 #
 # Contrôle de cache d'en-tête
 Header append Cache-Control "public"
 # Expires en-tête
 Expires Actif sur
  ExpiresDefault "accès plus 1 heure"
  #ExpiresDefault "accès plus 10 ans"

Mise en cache de fichiers javascript à l'aide d'un fichier .htaccess

 ExpiresDefault "accès plus 3 jours"

Soyez prudent lors de la mise en cache, car lors du changement de fichier, l'utilisateur ne peut obtenir une nouvelle version qu'après 3 jours!

Comment forcer les pages HTML à traiter le code PHP?

Écrivez les lignes suivantes dans votre fichier .htaccess:
  RemoveHandler .php .htm .html
 AddHandler application / x-httpd-php .php .htm .html

Comment héberger plusieurs sites sur un même hébergement partagé?

Pour placer deux sites ou plus sur un même hébergement virtuel, contrairement au nombre de domaines qui vous sont attribués par le plan tarifaire, vous devez écrire les lignes suivantes dans le fichier ".htaccess":

  RewriteEngine On
 RewriteRule ^ newdirectory / - [L]
 RewriteCond% {HTTP_HOST} (www.?? Newdomain.ru [NC]
 RewriteRule (. *) Newdirectory / $ 1 [L]


newdirectory / - dossier dans lequel le deuxième site sera situé
newdomain.ru - le domaine pour lequel nous faisons la redirection

Veuillez noter que dans ce cas, vous aurez un compte de messagerie unique. C'est à dire si vous avez une boîte aux lettres admin@domain.ru, après la connexion au domaine newdomain.ru, un deuxième nom apparaît dans la boîte aux lettres admin@domain.ru - admin@newdomain.ru. Et lors de la création d'une nouvelle boîte aux lettres (par exemple, info), deux noms lui sont automatiquement attribués - info@domain.ru et info@newdomain.ru.

Rechercher des pages dans plus d'un répertoire

Il est parfois nécessaire d'autoriser le serveur Web à rechercher des pages dans plusieurs répertoires.

  RewriteEngine on

 # essaie d'abord de le trouver à l'endroit spécifié / ...
 # ... et si trouvé, terminez la recherche:
 RewriteCond / your / docroot / dir1 /% {REQUEST_FILENAME} -f
 RewriteRule ^ (. +) / Votre / docroot / dir1 / $ 1 [L]

 # deuxièmement - essayez de le trouver dans un pub / ...
 # ... et si trouvé, terminez la recherche:
 RewriteCond / your / docroot / dir2 /% {REQUEST_FILENAME} -f
 RewriteRule ^ (. +) / Votre / docroot / dir2 / $ 1 [L]

 # sinon on continue pour d'autres directives
 RewriteRule ^ (. +) - [PT]

Hôtes virtuels utilisateur

Si vous souhaitez fournir des adresses www.subdomain.domain.ru pour les pages utilisateur, vous pouvez utiliser le jeu de règles suivant pour convertir http://www.subdomain.domain.ru/path en chemin interne / home / sous-domaine / path:

  RewriteEngine on
 RewriteCond% {HTTP_HOST} ^ www \. [^.] + \. En $
 RewriteRule ^ (. +)% {HTTP_HOST} $ 1 [C]
 RewriteRule ^ www \. ([^.] +) \. Ru (. *) / Home / $ 1 $ 2

Fichiers endommagés lors du téléchargement sur le serveur

Si, lors du transfert de fichiers via des formulaires (au niveau du enctype = "multipart / form-data" spécifié), des données binaires sont endommagées, écrivez dans la directive /cgi-bin/.htaccess:
  CharsetRecodeMultipartForms Off.

Erreur lors du chargement des fichiers SWF.
Erreurs lors de l'accès aux pages contenant des mots-clés
tapez $ _REQUEST

Cela peut être dû au module installé. dans Apache. Par défaut, il bloque les lignes contenant des arguments SQL et d'autres commandes potentiellement dangereuses dans les requêtes.

Messages d'erreur possibles:

Interdit

Vous n'êtes pas autorisé à accéder à /adm/index.php sur ce serveur. En outre, il s'agit d'un message d'erreur 404.
ou
La demande est dangereuse et a été rejetée.
Ajouter à .htaccess
 SecFilterEngine Off
 SecFilterScanPOST Off
Pour le message:
"POST /wp-admin/async-upload.php HTTP / 1.1" 406 354 "-" "Shockwave Flash"
Vous pouvez supprimer la protection uniquement pour le téléchargement de fichiers sur le serveur:
 SecFilterEngine Off
 SecFilterScanPOST Off

Il est optimal de supprimer la protection uniquement du dossier dans lequel elle est nécessaire, sans supprimer la protection de l'ensemble du site.

Variables serveur

Ce sont des variables comme % {NAME_OF_VARIABLE}

NAME_OF_VARIABLE peut être une chaîne extraite de la liste suivante:

En-têtes HTTP: connexion & demande:
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
serveurs internes: systémique: spécial:
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TEMPS
API_VERSION
LA RECHERCHE
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ

Ces variables correspondent pleinement aux en-têtes MIME HTTP, aux variables de serveur Apache ou aux champs de structure système Unix de même nom. Ceux qui sont spéciaux pour mod_rewrite incluent:

IS_SUBREQ - Contiendra le texte "true" si la requête est en cours d'exécution en tant que sous-requête, "false" sinon. Les sous-requêtes peuvent être générées par des modules ayant besoin de gérer des fichiers supplémentaires ou des URI pour pouvoir exécuter leurs propres tâches.

API_VERSION - Il s'agit de la version de l'API du module Apache (interface interne entre le serveur et le module) dans la version actuelle du serveur, définie dans include / ap_mmn.h. La version API du module correspond à la version d'Apache utilisée (pour la version d'Apache 1.3.14, par exemple, 19990320: 10), mais cela intéresse surtout les auteurs des modules.

THE_REQUEST - Chaîne de requête HTTP complète envoyée par le navigateur au serveur (c'est-à-dire " GET /index.html HTTP / 1.1 "). Il n'inclut pas les en-têtes supplémentaires envoyés par le navigateur.

REQUEST_URI - La ressource demandée dans la ligne de requête HTTP.

REQUEST_FILENAME - Chemin complet du système de fichiers du serveur vers le fichier ou le script correspondant à cette demande.

Notes:

  1. Les variables SCRIPT_FILENAME et REQUEST_FILENAME contiennent les mêmes valeurs, c’est-à-dire la valeur du champ filename dans la structure interne Apache request_rec . Le premier nom est simplement le nom connu de la variable CGI, tandis que le second est la copie permanente de REQUEST_URI (contenant la valeur du champ uri de la structure request_rec ).
  2. Il existe un format spécial: % {ENV: variable} où la variable peut être n’importe quelle variable d’environnement. Ceci est recherché dans les structures internes d'Apache et (si ce n'est pas le cas) en appelant getenv () à partir du processus du serveur Apache.
  3. Il existe un format spécial: % {HTTP: en-tête} où l'en- tête peut être n'importe quel nom HTTP de l'en-tête MIME. Ceci est recherché dans une requête HTTP. Exemple: % {HTTP: Proxy-Connection} La valeur HTTP de l'en - tête " Proxy-Connection: ".
  4. Il existe un format spécial % {LA-U: variable} des demandes de transfert générées par une sous-requête interne (basée sur une URL) afin de déterminer la valeur finale de la variable . Utilisez cette option lorsque vous souhaitez utiliser une variable pour les transformations, qui est en fait déterminée ultérieurement, dans une phase de l'API et donc non disponible à ce stade. Par exemple, lorsque vous souhaitez convertir la variable REMOTE_USER du contexte du serveur (fichier httpd.conf ), vous devez utiliser % {LA-U: REMOTE_USER} car cette variable est définie dans les phases d'autorisation qui suivent la phase de traduction de l'URL dans laquelle mod_rewrite fonctionne. D'autre part, en raison de l'implémentation de mod_rewrite dans le contexte d'un répertoire (fichier .htaccess) via la phase d'API Fixup et parce que les phases d'autorisation passent à cette phase, vous pouvez simplement utiliser % {REMOTE_USER} .
  5. Il existe un format spécial: % {LA-F: variable} qui crée une sous-requête interne (basée sur le nom du fichier) afin de déterminer la valeur finale de la variable . C'est fondamentalement le même que le format LA-U ci-dessus.

Page d'accueil sans duplication

Habituellement, le code de la page d'accueil est physiquement situé dans le fichier index.html ou index.php, mais le site doit être ouvert pour toutes les demandes: yoursite.ru, yoursite.ru/index.html, www.yoursite.ru et www.yoursite.ru/index. .html. Mais pour les moteurs de recherche, il s'agit de quatre URL différentes! Si vous ne configurez pas correctement .htaccess, le moteur de recherche ajoutera quatre pages identiques à son index. C'est un signe de mauvaise qualité du site. Pour éviter ce problème, vous pouvez utiliser ce code dans .htaccess:

  Options + SuivreSymLiens
 RewriteEngine on
 RewriteCond% {HTTP_HOST} ^ votresite.ru
 RewriteRule (. *) Http://www.yoursite.ru/$1 [R = 301, L]
 RewriteCond% {THE_REQUEST} ^ [AZ] {3.9} \ / index \ .html \ HTTP /
 RewriteRule ^ index \ .html $ http://www.yoursite.ru/ [R = 301, L]

Toutes les pages en double seront collées avec une redirection avec le code 301 avec la page principale - http://www.yoursite.ru/.

Dupliquer des pages sans barre oblique à la fin de l'URL

Pour éviter la situation avec les pages d'indexation www.yoursite.ru/about et www.yoursite.ru/about/ différentes, insérez le code suivant:

Des pages sans barre oblique seront installés rediriger en "barres obliques".

  RewriteCond% {REQUEST_FILENAME}! -F
 RewriteCond% {REQUEST_URI}! (. *) / $
 RewriteRule ^ (. *) $ / $ 1 / [R = 301, L]

Enregistrer des fichiers au lieu d'ouvrir

Beaucoup ont vu comment, en essayant de télécharger une archive avec l'extension .rar, le navigateur l'ouvre sous forme de texte brut à partir d'un fouillis de caractères. Cela signifie que le serveur de site n'est pas configuré pour forcer l'enregistrement des types de fichiers qui ne doivent pas s'ouvrir dans le navigateur.

  AddType application / octet-stream .rar .doc .mov .avi .pdf .xls .mp4