Table des matières

Htaccess

Note importante

Il ne faut pas oublier d'activer le moteur de réécriture dans l'htaccess pour que les règles fonctionnent.

RewriteEngine on 

Ignorer X règles par condition

RewriteCond %{HTTP_HOST} 	!example.com$   # le domaine ne termine pas par example.com
RewriteRule .* - [S=2]                          # alors on ignore les 2 règles suivantes
RewriteRule ^$		  	http://www.newdomain.com	[R=301,L]
RewriteRule ^(.*)$  		http://www.newdomain.com/$1	[QSA,L,R=301]

Redirection d'un domaine à un autre

Pour rediriger proprement une url d'un site vers une autre url en conservant la page à afficher :

RewriteCond %{HTTP_HOST} mondomaine\.com$ [NC] 
RewriteRule ^(.*)$ http://www.mondomaineredirige.com/$1 [R=301,L]

Cela va rediriger par exemple www.mondomaine.com/toto.html (et mondomaine.com/toto.html) vers www.mondomaineredirige.com/toto.html

La première ligne vérifie le host appelé, si la condition est positive la seconde ligne est appelée en récupérant la page appelée ( en utilisant la regexp (.*) qui renvoie $1 )

Redirection non-www vers www

RewriteCond %{HTTP_HOST} ^exemple\.com$ [NC]
RewriteRule (.*) http://www.exemple.com/$1 [R=301,L]

Redirection vers une page temporaire pour les personnes non autorisées

Pour rediriger vers une page temporaire, mais également pouvoir être le seul à pouvoir consulter le site en limitant les accès par adresse ip, il faut tout d'abord créer un dossier dans lequel on va mettre en place la page temporaire ainsi que les éventuelles feuilles de style, images, etc…

Dans le .htaccess on ajoutera alors en première ligne

RewriteEngine on
RewriteCond %{REQUEST_URI} !/mondossierautorise/.*$    # le dossier contenant la page temporaire
RewriteCond %{REMOTE_ADDR} !111.222.333.444            # mettre ici l'ip autorisée...
RewriteRule $ /mondossierautorise/index.html [R=301,L] # index.html par exemple

A partir de là, toutes les personnes n'ayant pas l'ip requise seront redirigées vers la page /mondossierautorise/index.html, les autres vers le site ( très utile pour tester les mises à jour avant mise en production par exemple…)

Il est possible de mettre plusieurs ip en copiant la ligne de condition vérifiant l'ip.

Rediriger à partir d'une query

Pour cette règle on passe par une condition et une règle, exemple :

RewriteCond %{QUERY_STRING} ^page=250&id_lang=4$
RewriteRule ^index\.php$ http://www.monsite.com/mapage.html?	[R=301,L]

Attention à ne pas oublier le point d'interrogation à la fin de la rewrite rule sinon les paramètres que la query se retrouveront à la fin.

Activer la compression des fichiers

La compression gzip à la volée nécessite l'activation du module deflate dans Apache. Dans cet exemple on va compresser les fichier par type et par extension en vérifiant également que le navigateur accepte la compression.

<IfModule mod_deflate.c>
	AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
 
	<FilesMatch "\\.(js|css|html|htm|php|xml)$">
		SetOutputFilter DEFLATE
	</FilesMatch>
 
	BrowserMatch ^Mozilla/4 gzip-only-text/html
	BrowserMatch ^Mozilla/4\.0[678] no-gzip
	BrowserMatch \bMSIE !no-gzip !gzip-only-text/html	
</IfModule>

Mettre une durée de cache par défaut

Nécessaire pour une bonne optimisation, nécessite l'activation du module expires dans Apache :

<IfModule mod_expires.c>
    ExpiresDefault "access plus 1 year"
</IfModule>

Mettre en place une redirection simple type url1 vers url2

Nécessaire souvent lors d'une opération marketing (communiquer sur une adresse simple pour un produit), cela passe par la création d'une règle de redirection permanent :

Exemple pour rediriger l'url www.exemple.com/chemin/page.html vers www.exemple.com/autrechemin/autrepage.html

RedirectPermanent  /chemin/page.html http://www.exemple.com/autrechemin/autrepage.html

Ou avec un RewriteRule :

RewriteRule ^chemin/page\.html$ http://www.exemple.com/autrechemin/autrepage.html?	[R=301,L]

Attention à l'ordre dans lequel les différentes règles du htaccess s'exécutent !

Mise en cache par type de fichier

Voici un exemple assez courant pour la mise en cache de fichiers par type :

# 1 AN
<FilesMatch "\.(ico|pdf|flv)$">
Header set Cache-Control "max-age=29030400, public"
</FilesMatch>
# 1 SEMAINE
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
# 2 JOURS
<FilesMatch "\.(xml|txt|css|js)$">
Header set Cache-Control "max-age=172800, proxy-revalidate"
</FilesMatch>
# 1 MINUTE
<FilesMatch "\.(html|htm|php)$">
Header set Cache-Control "max-age=60, private, proxy-revalidate"
</FilesMatch>

Exécuter du PHP dans les fichiers js (ou css)

Exemple pour les fichiers js

AddType application/x-httpd-php .js
AddHandler x-httpd-php5 .js
 
<FilesMatch "\.(js|php)$">
SetHandler application/x-httpd-php
</FilesMatch>

Redirection vers un fichier A si le fichier B n'existe pas

Voici un exemple assez courant pour la redirection vers un fichier par défaut si le fichier demandé n'existe pas :

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* fichier_par_defaut.php

Redirection de la globalité des pages d'un site vers une autre URL

RewriteRule ^(.*)$ http://www.nouvelle-url.com/nouvelle-page.html [L,QSA]

Désactiver l'utilisation de PHP dans un dossier et tous ses sous dossiers

Pour protéger par exemple un dossier où sont uploadées des images

RemoveHandler .php .phtml .php3
RemoveType .php .phtml .php3
php_flag engine off