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

Module mod_rewrite ч.4

Dans cette publication, nous aborderons les directives qui n'ont pas eu le temps de couvrir dans les parties précédentes. Ces directives ne peuvent pas être déterminées au niveau du répertoire. Cela signifie que vous devez avoir accès au fichier de configuration du serveur Web Apache (httpd.conf).

Habituellement, un tel accès est disponible pour les utilisateurs "root" ou l'administrateur du serveur.

Si vous souhaitez enregistrer toutes les opérations effectuées avec mod_rewrite, vous pouvez l'activer avec l'entrée suivante: RewriteLog /usr/local/apache/logs/mod_rewrite_log
RewriteLogLevel 1
RewriteLog /usr/local/apache/logs/mod_rewrite_log
RewriteLogLevel 1

Cette ligne doit être entrée dans «Section 2: Configuration du serveur principal» dans le fichier httpd.conf, pas dans le fichier .htaccess!

Toutes les manipulations effectuées par mod_rewrite seront écrites dans ce fichier. Le nom du fichier journal peut être n'importe quoi. Vous pouvez spécifier un chemin absolu ou relatif (par rapport à ServerRoot) vers le fichier.

Si vous souhaitez conserver différents fichiers journaux pour différents hôtes virtuels, vous devez entrer les modifications dans "Section 3: Serveurs virtuels", par exemple: ServerAdmin webmaster@yourdomain.com DocumentRoot /usr/www/htdocs/yourdomain ServerName yourdomain.com RewriteLog /usr/apache/logs/yourdomain_mod_rewrite_log
RewriteLogLevel 1
ServerAdmin webmaster@yourdomain.com DocumentRoot /usr/www/htdocs/yourdomain ServerName yourdomain.com RewriteLog /usr/apache/logs/yourdomain_mod_rewrite_log
RewriteLogLevel 1

RewriteLogLevel peut être défini dans la plage de 1 à 8. Habituellement, le premier niveau est suffisant. Des niveaux plus élevés sont utilisés pour le débangeage.

Une autre directive, très pratique pour le camouflage, est la carte dite de réécriture . Ce sont des fichiers contenant des paires clé / valeur, généralement au format d'un fichier texte: cde2c920.infoseek.com spider 205.226.201.32 spider cde2c923.infoseek.com spider 205.226.201.35 spider cde2c981.infoseek.com spider 205.226.201.129 spider cde2cb23.infoseek.com spider 205.226.203.35 spider

Les clés, comme vous pouvez le voir, sont des noms d'hôtes ou des adresses IP. Dans cet exemple simple, la valeur est toujours un - "spider". Naturellement, dans un fichier réel, les valeurs seront différentes. Cette directive peut être écrite dans la seconde section ("Configuration du serveur principal") ou dans la troisième section ("Serveurs virtuels") du fichier httpd.conf: RewriteMap botBase txt:/www/yourdomain/spiderspy.txt

Une "carte de réécriture" aura un effet sur l'ensemble du serveur.

En outre, ce qui suit est écrit dans le fichier .htaccess: RewriteCond ${botBase:%{REMOTE_HOST}} =spider [OR] RewriteCond ${botBase:%{REMOTE_ADDR}} =spider RewriteRule ^(.*).htm$ $1.htm [L] RewriteRule ^.*.htm$ index.html [L]

Ces conditions effectueront une vérification du système: si la requête est faite par le moteur de recherche. Pour ce faire, le fichier spiderspy.txt est recherché. Si la clé est trouvée, la valeur "spider" sera retournée, et la "condition" sera vraie.

Ensuite, la première RewriteRule est exécutée. Cela signifie que la page ".htm" demandée sera donnée au moteur de recherche. La variable $ 1 est égale à la partie entre parenthèses "^ (. *). Htm $", c'est-à-dire que le nom du fichier restera le même.

Si l'URL est appelée par un visiteur ordinaire, alors la deuxième "règle" est appliquée: l'utilisateur sera redirigé vers la page "index.html".

Puisque les pages ".htm" ne seront lues que par des "araignées", elles peuvent être optimisées en conséquence pour les moteurs de recherche. Vous pouvez également utiliser le fichier au format "dbm" au lieu du fichier texte ordinaire. Le format de données binaires vous permet d'accélérer la recherche, ce qui est particulièrement important si vous travaillez avec de très grandes listes de moteurs de recherche. L'exemple donné ci-dessus offre une fonctionnalité de dissimulation simple. Tous les visiteurs réguliers seront toujours redirigés vers la page "index.html" et aucun fichier journal ne sera enregistré en dehors des logs de mod_rewrite.

Vous pouvez remplacer plusieurs lignes de code php (perl, etc.) dans vos applications, en utilisant juste une ou deux lignes de mod_rewrite. Le dernier exemple illustrera ceci plus en détail.

L'objectif est de montrer aux visiteurs une "photo du jour". Un visiteur qui clique sur le lien http://yoursite.com/pic.html verra la meilleure photo ou photo de la journée, et ce, tous les jours. Nous allons travailler avec des variables de serveur:

TIME_MON
TIME_DAY

Mettez une seule ligne dans le fichier .htaccess: RewriteRule ^pic.html$ pic-%{TIME_MON}-%{TIME_DAY}.html

L'URL demandée sera remplacée, par exemple:

pic-08-28.html
pic-08-29.html
pic-08-30.html
et ainsi de suite.

Maintenant, tout ce que vous avez à faire est une fois de télécharger des fichiers avec les noms propres et oublier la mise à jour quotidienne du lien. Les variables de temps peuvent également être utilisées pour d'autres périodicités.

C'était le dernier exemple d'une série de publications sur le remarquable module mod_rewrite. Naturellement, il était impossible de toucher toutes les nuances, directives, variables, etc. Dans cette publication, l'objectif était différent - donner une idée générale et une compréhension des bases, et ainsi dire «mettre les choses sur la table».