Une page utile qui permet de créer des redirections htaccess :
Catégorie : htaccess
Protéger les fichiers d’un répertoire par redirection
Empêche l’accès direct par l’url à un fichier d’un répertoire protégé par ce script htaccess.
Il reste possible de télécharger un fichier du répertoire via un fichier PHP utilisant un script spécifique (agissant au niveau HTTP) forçant le téléchargement d’un fichier (demandé via un formulaire distant par exemple).
Contenu du htaccess :
- Première ligne : Active le moteur de réécriture
- Deuxième ligne : Indique une condition = « Si la requête concerne un fichier… »
- Troisième ligne : Indique une règle de réécriture. Dans l’exemple, on affiche le fichier index.php du répertoire.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.+$ index.php [L]
Notes :
- Sur la deuxième ligne, pour indiquer que la requête ne concerne par un fichier, il faut terminer par
!-f - On peut indiquer une condition de requête portant sur un répertoire en terminant par
-d.
Exemple :RewriteCond %{REQUEST_FILENAME} -d [L](troisième ligne) permet de terminer le processus de réécriture en cours
Sources htaccess
httpd.apache.org/docs/…
fr.openclassrooms.com/…
Ultimate .htaccess Guide (en anglais – très complet)
commentcamarche.net/contents/apache/apacht.php3
Créer, tester, comprendre les redirections htaccess :
www.yakaferci.com/redirection/
Définir le fichier index par défaut
Il est possible de définir le fichier index par défaut avec la commande DirectoryIndex, syntaxe de la forme :
DirectoryIndex index.php index.html accueil.php index.phtml /erreurs/403.php
Les fichiers sont indiqués dans l’ordre de priorité : dans l’exemple ci-dessus, le navigateur devra afficher le premier fichier cité (index.php), s’il ne le trouve pas, le fichier suivant etc.
Réécriture d’url – variables
références : httpd.apache.org – v. aussi https://craym.eu/tutoriels/…
Création et utilisation de « références » (autrement dit, des variables, réutilisables dans le code htaccess) (v. httpd.apache.org) :
En utilisant des parenthèses dans les lignes de condition (RewriteCond) ou de règle de réécriture (RewriteRule), on crée des références qui peuvent être résumées et rappelées par %N ou $N (« N » représentant le rang de la variable, dans l’ordre de création de ces variables).
%N : variables issues des lignes conditionnelles
$N : variables issues des lignes de règles de réécriture
Ex. :
RewriteEngine On
RewriteCond %{HTTP_HOST} !fb-graphic.com [NC]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.fb-graphic.com/$1?domaine=%1 [L]
traduction :
- si l’hôte n’est pas fb-graphic.com
- et si l’hôte commence par www.
- on réécrit www.exemple.tld(/x) en
http://www.fb-graphic.com/(x)?domaine=exemple.tld
Réécriture d’url – départ
références :
www.webmaster-hub.com
www.magneto.be
https://craym.eu/tutoriels/…
On commence toujours le htaccess de réécriture d’url par le code suivant (cf. références) :
Options +FollowSymlinks
RewriteEngine on
On écrit éventuellement une ou plusieurs lignes de conditions de redirection sous la forme :
RewriteCond %{HTTP_HOST} !www.fb-graphic.com [OR]
RewriteCond %{QUERY_STRING} !^123456$ [NC]
([OR] et [NC] sont des exemples de « flags »)
On écrit la règle de réécriture sous la forme :
RewriteRule ^(.*)\.htm$ $1.php [L]
la première partie (^(.*)\.htm$) représente ce qui doit être réécrit ; elle peut utiliser les expressions régulières et des variables
^ signifie « début de la chaîne obligatoirement »
$ signifie « fin de la chaîne obligatoirement »
la deuxième partie ($1.php) indique la forme de réécriture souhaitée ; elle peut utiliser des variables
$1 représente une variable
Pour une régle sans réécriture d’url, on utilise le signe -.
Exemple : RewriteRule \.(gif|jpg|png)$ - [F,L]
Réécriture d’url – flags (drapeaux)
références :
www.webmaster-hub.com
httpd.apache.org
| [L] | Celui-ci vous semble familier, comme nous l’avons vu dans notre précédent exemple. Il mérite toutefois une précision. Lorsque le module de réécriture est actif, les règles sont lues séquentiellement et l’URL est comparée ligne à ligne avec le premier argument de celles-ci jusqu’à la dernière. Si une réécriture est effectuée, c’est la forme réécrite qui sera utilisée en entrée pour les règles suivantes. Le flag [L] permet de sortir prématurément de la boucle. |
| [R] [R=code] |
Dans ces deux formes une redirection est effectuée. Si l’argument code n’est pas précisé, une redirection 302 (déplacé temporairement) est effectuée. Si vous souhaitez faire savoir au navigateur/robot qu’une page a été remplacée définitivement, utiliser le code 301 comme dans : RewriteRule ^ancien\.html$ http://domaine.tld/nouveau.html [R=301,L] Dans ce cas précis, une réécriture « externe » s’impose (utilisation de http://…) |
| [F] | Forbidden – interdit. Retourne un code 403, par exemple : RewriteRule ^secret.html$ – [F] |
| [NC] | NoCase, ou « insensible à la casse ». La règle suivante : RewriteRule ^script\.php$ programme.php [NC,L] S’appliquera aussi bien à script .php, SCRIPT.PHP ou ScRiPt .PhP |
| [G] | Gone. Cette page n’existe plus et retourne une entête http 410 |
| [N] | Force l’analyse et l’exécution de toutes les règles en repartant du début de la liste. Ici encore, comme expliqué plus haut ([L]), c’est l’URL modifiée après exécution de la dernière règle qui est utilisée en entrée, et non l’URL originelle. Attention aux boucles infinies ! |
| [C] | Chain, chaînage avec la ou les règles suivantes jusqu’à la première règle ne se terminant pas par [C] Apache interprète ce flag comme suit : s’il y a réécriture (la règle est vérifiée), la règle suivante est exécutée avec la chaîne réécrite en entrée. Si la règle ne se vérifie pas, toutes les règles qui suivent jusqu’à la première ne comportant pas le flag [C] ne sont pas appliquées. |
| [QSA] | Query String Append. Rajoute le QUERY_STRING à la fin de l’expression, après la réécriture. À réserver pour la dernière règle de réécriture. Utilisée le plus souvent avec le flag [L], comme dans [QSA,L] |
Réécriture d’url – manipuler les QUERY_STRING
QUERY_STRING = paramètres d’url
Avec le flag [QSA] on indique à la règle de réécriture qu’elle doit ajouter en fin d’url (et, le cas échéant, à la suite des paramètres existants dans la réécriture, avec « & ») les paramètres de l’url d’origine (avant réécriture).
Sans drapeau [QSA], le QUERY_STRING demandé par la réécriture remplace automatiquement celui d’origine, sinon, celui d’origine est automatiquement ajouté (si l’url réécrite n’en demande pas un nouveau donc) (ceci dépend peut-être des réglages de serveur).
Pour forcer la disparition de tout QUERY_STRING, il suffit de faire terminer la réécriture par un point d’interrogation et ne pas mentionner [QSA].
Exemples :
=> Une page cherche.php?objet=stylo deviendra http://www.fb-graphic.com/trouve.php?objet=stylo
RewriteRule ^.* http://www.fb-graphic.com/trouve.php [QSA,L]
=> Une page cherche.php?objet=stylo deviendra http://www.fb-graphic.com/trouve.php?trousse&objet=stylo
RewriteRule ^.* http://www.fb-graphic.com/trouve.php?trousse [QSA,L]
=> Une page cherche.php?objet=stylo deviendra http://www.fb-graphic.com/trouve.php?trousse
RewriteRule ^.* http://www.fb-graphic.com/trouve.php?trousse [L]
=> Une page cherche.php?objet=stylo » deviendra http://www.fb-graphic.com/trouve.php
RewriteRule ^.* http://www.fb-graphic.com/trouve.php? [L]
Généralités, sources
Les fichiers htaccess et associés, les fichiers textes, doivent être téléchargés en mode ascii !
Sources :
[include-post id= »640″]
Restriction d’accès
rappel : pour être reconnus les fichiers doivent être téléchargés en mode ascii !
Syntaxe du fichier .htaccess (v. Selfhtml, phpdebutant…) :
Digest :
# fichier .htaccess pour le répertoire prive AuthType Basic AuthName "espace prive" AuthUserFile /usr/local/etc./htdocs/www/lesite/prive/.htpasswd AuthGroupFile /usr/local/etc./htdocs/www/lesite/prive/.htgroups require user Audrey Christian Antoine require group techniciens
note à propos du chemin réel sur le serveur (décrit à AuthUserFile et AuthGroupFile) :
il est possible de connaître ce chemin à l’aide de php. Il suffit de créer un fichier php avec le code <?php echo realpath("index.php"); ?> (s’il n’y a pas de fichier index.php dans le répertoire de ce fichier, indiquer un fichier existant ou encore ce fichier lui-même).
Pour limiter la protection (cf. Selfhtml) :
# Fichier .htaccess pour le répertoire prive AuthType Basic AuthName "espace-Service" AuthUserFile /usr/local/etc/httpd/htdocs/www.lesite.com/prive/.htpasswd AuthGroupFile /usr/local/etc/httpd/htdocs/www.lesite.com/prive/.htpasswd.htgroups <Files *.htm> require user Audrey Christian Antoine require group techniciens </Files>
selfhtml : « Dans le repère d’ouverture, derrière la parenthèse pointue d’ouverture, peut figurer soit Files, comme dans l’exemple ci-dessus, soit Limit. Derrière, vous pouvez faire uniquement une mention restrictive. Avec *.htm comme dans l’exemple, vous limitez la protection aux fichiers HTML. Avec une mention comme secret.htm ce seul et unique fichier serait protégé. Avec Limit vous pouvez limiter la méthode d’accès par exemple à GET ou bien à POST. »
Syntaxe du fichier .htpassword :
# Fichier d'utilisateurs pour le repertoire "prive" Audrey:INGoUvP4QNWNM Michel:INw2mPEH.owe2 Christelle:INt4TUI7dOlQ6 Fanny:IN0w9l5E2Rltw Norbert:INP0Mscg62Cbg Diane:INbi/z9y/ogns Christine:INmkm1zgB8qGk Gaspard:INeRD/cUQIFP6 Christian:INL8hI.TVvsds Antoine:INEyrT70PYPlo
Les mots de passe sont cryptés.
Attention : Free n’autorise pas le cryptage des mots de passe.
Syntaxe du fichier .htgroups :
# Fichier de groupe pour le repertoire "prive" techniciens: Gaspard Diane Christelle