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

Fichier de configuration pour les serveurs Apache .htaccess

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 dans des répertoires distincts (dossiers) sans donner accès au fichier de configuration principal. Par exemple, définissez des autorisations pour les fichiers dans un répertoire, modifiez les noms des fichiers d'index, gérez indépendamment les erreurs Apache, 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 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
  • RewriteEngine
  • RewriteLock
  • RewriteLog
  • RewriteLogLevel
  • RewriteMap
  • RewriteOptions
  • RewriteRule

Variantes de l'implémentation de la redirection utilisant le fichier .htaccess

  1. Redirection simple:
      Redirection 301 / http://www.domainname.ru/
    
    ou
      redirection / secret http://www.site.ru/nosecret
    
    Il est placé dans le fichier .htaccess ou httpd.conf pour Apache. Le premier "/" signifie que tout ce qui se trouve au niveau supérieur 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, vous pouvez le faire:

    Redirection 301 /old/old.htm http://www.you.ru/new.htm où:
    /old/old.htm - chemin et 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 sur l'ip de l'utilisateur ou en demandant une page particulière (et aussi par le masque de nom).
    Si l'utilisateur a l'adresse IP 192.152.37.125, il sera 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 vous demandez des fichiers dont l'extension n'est pas spécifiée dans le fichier .htaccess (gif et jpg), vous devez rediriger:
      RewriteEngine On
     RewriteRule !. (Gif | jpg) $ index.php
    

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

  5. Rediriger avec une expression régulière:
      RedirectMatch 301 (. *) Http: //www.yourdomain.ru$1 Il est prescrit dans le fichier .htaccess. 
    
    (. *) RedirectMatch correspond réellement aux modèles d'expressions régulières après le nom de domaine. Ainsi, vous ne pouvez pas faire correspondre le modèle à ^ / votredomaine.com. Cependant, vous pouvez convertir des pages en utilisant une extension .html pour des fichiers du même nom, mais avec une extension .php:
      RedirectMatch 301 (. *) \. Html $ http: //www.yourdomain.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 chaîne avec "* (Wildcard)" devrait être la dernière dans cette liste.

  6. Créer des URL lisibles
    Pour convertir, par exemple, www.site.ru/product.php?id=123 en www.site.ru/product/123 comme suit:
      RewriteEngine sur
     RewriteRule ^ product /([^/\.]+)/?$ 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:
      header ("HTTP / 1.1 301 déplacé définitivement"); 
     header ("Emplacement: http://www.newdomain.ru/newdir/newpage.htm"); 
     sortie (); 
    
    Naturellement, nous devons créer une page, en se référant à cela et se produira rediriger, et l'afficher sur le serveur. Et il est préférable de spécifier HTTP / 1.1 (et non HTTP / 1.0 ou HTTP / 0.9, qui ne supportent pas l'hébergement virtuel)

  8. Redirigez tous les fichiers d'un dossier dans un fichier.
    Par exemple, vous n'avez plus besoin de la section du site Super Disc et vous souhaitez rediriger toutes les demandes vers le 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 tous les dossiers 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 / mon-ebook.html /hot-to-make-million.html [L, R = 301]
     RewriteRule ^ superdiscount (. *) $ /hot-offers.php [L, R = 301]
    

  10. Redirigez 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 maintenant, une demande à un fichier du formulaire http://www.kass.ws/article.jsp?id=8632 et / ou http://www.kass.ws/article.jsp?id=1245 sera envoyé au fichier http : //www.kass.ws/latestnews.htm.

  11. Redirection de masse de nouveaux fichiers.
    Passons maintenant au moment le plus difficile lorsque vous devez rediriger un grand nombre d'URL, par exemple après avoir modifié votre CMS. Un certain nombre de problèmes se posent immédiatement. Premièrement, entrer toutes les adresses changées dans un fichier .htaccess prendra beaucoup de temps, et en soi une occupation désagréable. Deuxièmement, un trop grand nombre d'entrées dans le fichier .htaccess ralentira le serveur Apache. Et troisièmement, lorsque vous entrez cette quantité d'informations, il est probable que vous vous trompez quelque part. Sur ce, la meilleure solution est d'embaucher un programmeur qui vous écrira une redirection dynamique.
    L'exemple suivant est écrit en PHP, mais il peut aussi être exécuté dans n'importe quelle langue. Supposons que vous passiez à un nouveau système de liens sur votre site et que tous les fichiers se terminant par l'ancien identifiant soient répartis parmi. Tout d'abord, nous créons une table dans la base de données qui contient l'ancien identifiant et la nouvelle URL pour la redirection. old_id INT new_url VARCHAR (255) Ensuite, écrivez le code qui liera votre ancien identifiant avec les nouvelles URL
    Après cela, ajoutez la ligne suivante dans .htaccess:
      RewriteRule ^ / product - (. *) _ ([0-9] +). Php /redirectold.php?productid=$2
    
    puis créez un fichier PHP redirectold.php, qui prendra en charge les redirections 301:
      <? php
     function getRedirectUrl ($ productid) {
     // Connexion à la base de données
     $ dServer = "localhost";
     $ dDb = "mydbname";
     $ dUser = "mydb_user";
     $ dPass = "mot de passe";
    
     $ s = @mysql_connect ($ dServer, $ dUser, $ dPass)
     ou die ("Impossible de se connecter au serveur de base de données");
    
     @mysql_select_db ($ dDb, $ s)
     ou die ("Impossible de se connecter à la base de données");
    
     $ query = "SELECT new_url FROM redirige WHERE old_id =".  $ productid;
     mysql_query ($ query);
     $ resultat = mysql_query ($ query);
     $ hasRecords = mysql_num_rows ($ resultat) == 0?  faux: vrai;
     if (! $ hasRecords) {
     $ ret = 'http://www.yoursite.com/';
     } else {
     while ($ row = mysql_fetch_array ($ résultat))
     {
     $ ret = 'http://www.yoursite.com/'.  $ row ["new_url"];
     }
     }
     mysql_close ($ s);
     return $ ret;
     }
    
     $ productid = $ _GET ["productid"];
     $ url = getRedirectUrl ($ productid);
    
     header ("HTTP / 1.1 301 déplacé définitivement");
     header ("Emplacement: $ url");
     sortie ();
     ?>
    

    Maintenant, tous les appels à vos anciennes URL seront appelés redirectold.php, qui trouvera la nouvelle URL et retournera 301 réponses avec votre nouveau lien.

    Redirections basées sur le temps

    Lorsque vous devez utiliser des astuces du type de contenu basé sur le contenu, le poids des webmasters utilise toujours des scripts CGI qui génèrent des redirections vers des pages spéciales. Comment cela peut-il être fait via mod_rewrite?

    Il existe de nombreuses variables nommé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épendant du temps:
     
      RewriteEngine sur RewriteCond% {TIME_HOUR}% {TIME_MIN}> 0700 RewriteCond% {TIME_HOUR}% {TIME_MIN} <1900 RewriteRule ^ foo \ .html $ foo.day.html RewriteRule ^ foo \ .html $ foo.night.html 

    Ceci donne le contenu de foo.day.html quand l'URL foo.html est demandée de 07:00 à 19:00 et dans le temps restant le contenu de foo.night.html.


  12. Nous supprimons toutes les demandes au 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. Modifier l'extension .html en .php
    Parfois, il arrive que vous ayez un site Web statique et que vous ayez besoin d'un script PHP. Pour ce faire, vous devez indiquer au serveur de traiter cette page en tant que fichier php.
     Application AddHandler / x-httpd-php .html
    
    Cette technique peut être utilisée pour d'autres extensions de fichiers:
     Application AddHandler / x-httpd-php .xml
     Application AddHandler / x-httpd-php .asp
    

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

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

    Et si vous souhaitez interdire l'accès à votre site à des utilisateurs IP individuels, nous écrirons les lignes suivantes:

     ordre autoriser, refuser
     permettre à tous
     refuser à partir de 192.152.37.125
     refuser à partir de 123.456.177
    
  4. Directive Options -Index - interdit l'affichage du contenu du répertoire en l'absence d'un fichier d'index Parfois, vous devez vous assurer que s'il n'y a pas de fichier dans le répertoire affiché par défaut, la liste des fichiers dans le répertoire ne s'affiche pas. Ensuite, vous pouvez ajouter cette ligne à .htaccess:
      Options -Indexes
    
    Dans ce cas, au lieu de la liste des fichiers dans le répertoire, le visiteur recevra l' erreur HTTP 403 - accès interdit.
  5. Refuser l'accès aux fichiers avec plusieurs types d'extension
     nier de tous
    
    Il est interdit d'accéder aux fichiers avec l'extension * .inc, * .conf et * .cfg. Bien que la directive, par défaut, ne fonctionne pas avec les expressions régulières, mais vous pouvez les activer en mettant le symbole tilde (~) dans les options de la directive. La syntaxe est la suivante: [tilde] [espace] [hereafter_all_uneless_block] Pour bloquer cet accès, nous écrirons ce qui suit:
      RewriteRule ^ .htaccess $ - [F]
    
    Cette règle se traduit comme suit:
    Si quelqu'un essaye d'accéder au fichier .htaccess, le système devrait produire le code d'erreur 'Réponse HTTP de 403' ou '403 Interdit - Vous n'avez pas la permission d'accéder à /.htaccess sur ce serveur'.

    La construction .htaccess $ dans cette expression régulière signifie:
    ^ - ancre de ligne de début
    $ est l'ancre de fin de ligne
    . - dans les expressions régulières, le point '.' Il désigne 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 exactement entre les ancres de début et de fin. Cela garantira que seul ce nom de fichier particulier et aucun autre générera un code d'erreur.
    [F] est un drapeau spécial "interdisant".
    [NC] - non sensible à la casse.
    [OU] - signifie «ou la condition suivante».

Définition de l'encodage

Déterminer l'encodage dans lequel le serveur "renvoie" les fichiers

  AddDefaultCharset windows-1251
options: KOI8-R , UTF-8 , Windows-1251

Déterminer l'encodage pour les fichiers téléchargés

  CharsetSourceEnc windows-1251

Définir un mot de passe pour un répertoire en utilisant .htaccess

Pour définir un mot de passe pour le répertoire, vous pouvez utiliser le système d'autorisation de base fourni sur le serveur Web Apache. Créez un fichier .htaccess avec les directives suivantes dans le répertoire auquel nous voulons restreindre l'accès par mot de passe:
  AuthType Basic
 AuthName "Some Name"
 AuthUserFile /www/some_login/www/htdocs/some_dir/.htpasswd
 exiger un utilisateur valide
Le chemin /www/some_login/www/htdocs/some_dir/.htpasswd indique le chemin d'accès complet au fichier de mot de passe sur le disque de notre serveur. Si, par exemple, vous placez le fichier .htpasswd (il y aura des mots de passe) dans le répertoire personnel où vous allez en accédant au serveur via FTP, le chemin d'accès à ce fichier sera /www/some_login/www/htdocs/some_dir/.htpasswd , où some_login est votre identifiant. Dans la directive AuthUserFile, nous spécifions le chemin absolu du fichier avec les logins / 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 .htaccess doit être transmis via FTP strictement en mode texte (ASCII).

Créez un fichier de mot de passe. Le fichier de mot de passe doit contenir une chaîne du formulaire login: password. Le mot de passe doit être crypté à l'aide de l'algorithme MD5. Une façon de créer un tel fichier est d'utiliser le programme inclus dans la distribution d'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).

Considérez comment créer un fichier de mot de passe dans le shell Unix directement sur le serveur. Nous allons dans le shell et exécutons les commandes suivantes:

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

Après la fin de l'établissement, toutes les connexions doivent être téléchargées sur le serveur. A propos des autres moyens de définir des mots de passe par 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
IE ignore les pages inférieures à 512 octets.

Indexer les répertoires et sous-répertoires

Pour éviter d'indexer les répertoires et sous-répertoires des moteurs de recherche, vous devez écrire cette ligne, par exemple:
  DirectoryIndex index.php
Cette directive spécifie le fichier à appeler lors de l'accès au répertoire sans spécifier de nom de fichier.

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

  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 une 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

Très souvent, il arrive que les webmasters copient impudemment le contenu de votre site avec des dessins, et les dessins sont téléchargés à partir de votre propre serveur. Cela crée un trafic inutile, ce qui entraîne souvent un certain nombre de problèmes. Comment pouvez-vous vous protéger de ces webmasters et ne pas empêcher les moteurs de recherche d'indexer les images? C'est simple:
  RewriteEngine sur
 RewriteCond% {HTTP_REFERER}.
 RewriteCond% {HTTP_REFERER}! ^ Http: // ([^.] + \.)? Site \.  [NC]
 RewriteCond% {HTTP_REFERER}! Google \.  [NC]
 RewriteCond% {HTTP_REFERER}! Recherche \? 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, au lieu des vraies images. Je recommande dans cette image d'afficher votre logo et un lien vers votre site.

Une autre variante de l'interdiction d'accès aux images provenant de sites non autorisés:

  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 env = local_ref

Les moteurs de recherche et toutes sortes de scanners créent du trafic collosal sur votre site. Le bloc de code suivant empêchera l'accès au site.

  RewriteCond% {HTTP_USER_AGENT} (Googlebot | Slurp | spider | Twiceler | heritrix |
	 Combiner | appie | boitho | e-SociétéRobot | Exabot | Nutch | OmniExplorer |
	 MJ12bot | ZyBorg / 1 | Demander \ Jeeves | AskJeeves | ActiveTouristBot |
	 JemmaTheTourist |  agadine3 | BecomeBot | Clustered-Search-Bot |
	 MSIECrawler | freefind | galaxie | genieknows | INGRID | grub-client |
	 MojeekBot | NaverBot | NetNose-Crawler | OnetSzukaj | PrassoSunner |
	 Asterias \ Crawler | THUNDERSTONE | GeorgeTheTouristBot |
	 VoilaBot | Vagabondo | fantomBro wser | furtif furtif | capeBrowser |
	 fantomCrew \ Navigateur | Girafabot | Indy \ Bibliothèque | Intelliseek | Zealbot |
	 Windows \ 95 | ^ Mozilla / 4 \ .05 \ \ [fr \] $ | ^ Mozilla / 4 \ .0 $) [NC]
 RewriteRule ^ (. *) $ - [F]
 #
 RewriteCond% {HTTP_USER_AGENT} ^ Mozilla. * [NC, OR]
 RewriteCond% {HTTP_USER_AGENT} ^ Opera. * [NC, OU]
 RewriteCond% {HTTP_USER_AGENT} ^ Firefox. * [NC, OU]
 RewriteCond% {HTTP_USER_AGENT} ^ Netscape. * [NC]
 RewriteRule ^ (. *) $ - [L]
 RewriteRule ^ (. *) $ - [F]

Suivi des appels dans votre fichier robots.txt

Pour avoir plus d'informations sur la visite des moteurs de recherche, il est utile d'avoir des informations détaillées sur l'accès au fichier robots.txt.Pour formaliser cela, dans '.htaccess' il devrait y avoir les entrées suivantes:
  RewriteEngine sur
  Options + SuivezSymlinks
  RewriteBase /
  RewriteRule ^ robots.txt $ /robot.php?%{REQUEST_URI}
Maintenant, en demandant le fichier 'robots.txt', notre RewriteRule redirige le visiteur (robot) vers le script de requête robot.php. De plus, la variable est transmise au script, qui sera traitée en fonction de vos besoins. 'REQUEST_URI' spécifie le nom du fichier demandé. Dans cet exemple, c'est 'robots.txt'. Le script lit le contenu de 'robots.txt' et l'envoie au navigateur Web ou au robot du moteur de recherche. Ainsi, nous pouvons compter les hits des visiteurs et les fichiers journaux.

PHPSESSID

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

  ini_set ("session.use_trans_sid", 0);

Soit en .htaccess, écrivez:

  php_flag session.use_trans_sid Désactivé

Si vous trouvez tout cela difficile, utilisez le prêt service de conversion d'URL dynamiques en URL statiques à l'aide de htaccess

Directives de cache

Mise en cache pour tous les types de fichiers en fonction du temps d'accès
  ExpiresActive sur
 ExpiresDefault "accès plus 600 secondes"
Mise en cache pour tous les types de fichiers selon l'heure du changement
  ExpiresActive 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"

Interdire la mise en cache avec le serveur 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

Écrivez en .htaccess ce qui suit:

  # Désactiver la mise en cache dans ce dossier
 # Vous devez activer les modules
 # mod_headers.c et mod_expires.c
 #
 # Header Cache-Control
 En-tête ajouter Cache-Control "pas de magasin, pas de cache, doit revalider"
 # Expire le titre
 ExpiresActive On
 ExpiresDefault "maintenant"

Les en-têtes nécessaires seront transférés automatiquement, et vous n'avez pas besoin de les écrire spécialement en PHP - le cache est déjà désactivé!

Description de l'en-tête http du cache Cache-control

Mise en cache avec le fichier .htaccess

  # Résolution de cache dans ce dossier
 # Vous devez activer les modules
 # mod_headers.c et mod_expires.c
 #
 # Header Cache-Control
 En-tête ajouter Cache-Control "public"
 # Expire le titre
 ExpiresActive On
  ExpiresDefault "accès plus 1 heures"
  #ExpiresDefault "accès plus 10 ans"

Mise en cache des fichiers javascript à l'aide du fichier .htaccess

 ExpiresDefault "accès plus 3 jours"

Soyez prudent lors de la mise en cache, car lors de la modification d'un fichier, l'utilisateur peut obtenir une nouvelle version seulement après 3 jours!

Comment puis-je obtenir des pages HTML pour gérer le code php?

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

Comment placer plusieurs sites sur un hébergement virtuel?

Pour placer deux sites ou plus sur un hébergement virtuel, malgré le nombre de domaines qui vous sont assignés, vous devez ajouter les lignes suivantes dans le fichier ".htaccess":

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

Où:
newdirectory / - le dossier où sera situé le second site
newdomain.ru - le domaine pour lequel nous redirigeons

Veuillez noter que vous aurez un seul compte de messagerie. Ie. si, vous avez une boîte admin@domain.ru, puis après avoir connecté le domaine newdomain.ru à la boîte admin@domain.ru un deuxième nom apparaît - admin@newdomain.ru. Et lorsque vous créez 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

Parfois, il est nécessaire de laisser le serveur web chercher des pages dans plus d'un répertoire.

  RewriteEngine sur

 # D'abord, essayez de le trouver à l'emplacement spécifié / ...
 # ... et si vous trouvez que nous terminons la recherche:
 RewriteCond / your / docroot / rep1 /% {REQUEST_FILENAME} -f
 RewriteRule ^ (. +) / Votre / docroot / dir1 / $ 1 [L]

 # Deuxièmement - essayez de le trouver dans un pub / ...
 # ... et si vous trouvez que nous terminons la recherche:
 RewriteCond / your / docroot / rep2 /% {REQUEST_FILENAME} -f
 RewriteRule ^ (. +) / Votre / docroot / dir2 / $ 1 [L]

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

Hôtes d'utilisateurs virtuels

Si vous souhaitez fournir des adresses à www.subdomain.domain.com pour les pages utilisateur, vous pouvez utiliser l'ensemble de règles suivant pour convertir http://www.subdomain.domain.ru/path en chemin interne / home / subdomain / path:

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

Les fichiers sont endommagés lorsqu'ils sont téléchargés sur le serveur

Si les données binaires sont endommagées lors du transfert de fichiers via des formulaires (avec l'attribut enctype = "multipart / form-data"), écrivez la directive dans /cgi-bin/.htaccess:
  CharsetRecodeMultipartForms désactivé.

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

Cela peut arriver à cause du module installé à Apache. Par défaut, il bloque dans les lignes de requêtes les arguments SQL et d'autres commandes potentiellement dangereuses.

Messages d'erreur possibles:

Interdit

Vous n'êtes pas autorisé à accéder à /adm/index.php sur ce serveur. En outre, une erreur 404 Not Found a été rencontrée en essayant d'utiliser un ErrorDocument pour gérer la requête.
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 déprotéger uniquement le téléchargement de fichiers sur le serveur:
 SecFilterEngine Off
 SecFilterScanPOST Off

Optimal pour supprimer la protection uniquement du dossier dans lequel il est nécessaire, sans supprimer la protection de l'ensemble du site.

Variables du serveur

Ce sont des variables du formulaire % {NAME_OF_VARIABLE}

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

En-têtes HTTP: connexion et 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ème: 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
TIME
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ

Ces variables correspondent complètement aux en-têtes HTTP MIME nommés de manière similaire, et aux variables de serveur Apache ou aux champs struct tm des systèmes Unix. 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 qui doivent traiter des fichiers supplémentaires ou un URI afin d'effectuer leurs propres tâches.

API_VERSION - Il s'agit de la version de l'API Apache (l'interface interne entre le serveur et le module) dans l'assemblage du serveur en cours, tel que défini dans include / ap_mmn.h. La version API du module correspond à la version d'Apache (pour Apache version 1.3.14, par exemple, c'est 19990320: 10), mais ceci est surtout intéressant pour les auteurs des modules.

THE_REQUEST - La chaîne de requête HTTP entière envoyée par le navigateur au serveur (c'est-à-dire, " GET /index.html HTTP / 1.1 "). Il n'inclut aucun en-tête supplémentaire envoyé par le navigateur.

REQUEST_URI - La ressource demandée dans la chaîne de requête HTTP.

REQUEST_FILENAME - Chemin d'accès complet dans le système de fichiers du serveur vers un fichier ou un script correspondant à cette requête.

Notes:

  1. Les variables SCRIPT_FILENAME et REQUEST_FILENAME contiennent les mêmes valeurs, c'est-à-dire la valeur du champ filename de la structure interne request_rec du serveur Apache. Le premier nom est simplement le nom largement connu de la variable CGI, tandis que le second est une 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 (s'il n'y en a pas) en appelant getenv () à partir du processus du serveur Apache.
  3. Il existe un format spécial: % {HTTP: header} où l'en- tête peut être n'importe quel nom d'en-tête HTTP MIME. Ceci est recherché dans la requête HTTP. Exemple: Valeur d'en-tête HTTP % {HTTP: Proxy-Connection} " Proxy-Connection: ".
  4. Il existe un format spécial pour % {LA-U: variable} des requêtes principales qui sont produites par une sous-requête interne (basée sur une URL) pour déterminer la valeur finale de la variable . Utilisez ceci lorsque vous voulez utiliser une variable pour les transformations qui est définie plus tard dans n'importe quelle phase de l'API, et n'est donc pas disponible à ce stade. Par exemple, lorsque vous voulez 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 d'URL dans laquelle mod_rewrite fonctionne. D'autre part, en raison de l'implémentation de mod_rewrite dans le contexte du répertoire (fichier .htaccess) via la phase de correction de l'API et parce que les phases d'autorisation passent avant 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 un fichier) pour déterminer la valeur finale de la variable . Fondamentalement, c'est le même que le format LA-U donné ci-dessus.

Page d'accueil sans duplication

Généralement, le code de la page principale se trouve physiquement dans le fichier index.html ou index.php, mais le site doit s'ouvrir sur l'une des demandes suivantes: yoursite.ru, yoursite.ru/index.html, www.yoursite.ru et www.yoursite.ru/index. .html. Mais pour les moteurs de recherche, ce sont quatre URL différentes! Si vous ne configurez pas .htaccess correctement, le moteur de recherche ajoutera quatre pages identiques à votre index. Ceci est un signe d'un site Web de qualité inférieure. Vous pouvez éviter ce problème à l'aide d'un tel code dans .htaccess:

  Options + SuivezSymLinks
 RewriteEngine sur
 RewriteCond% {HTTP_HOST} ^ votresite.fr
 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 un code de redirection 301 avec la page principale - http://www.yoursite.ru/.

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

Pour éviter que la situation avec l'indexation des pages www.yoursite.ru/about et www.yoursite.ru/about/ soit différente, mettez le code suivant:

A partir des pages sans barre oblique, une redirection sera définie sur "barre oblique".

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

Sauvegarder des fichiers au lieu d'ouvrir

Beaucoup ont vu comment, en essayant de télécharger une archive avec une extension .rar, le navigateur l'ouvre comme un simple texte à partir d'un hachage de caractères. Cela signifie que le site du serveur n'est pas configuré pour enregistrer de force les types de fichiers qui ne doivent pas être ouverts dans le navigateur.

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