Expressions régulières .htaccess d'Apache
Pour une solution simple, ajoutez ce qui suit à votre fichier .htaccess :
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.example\.com)?$ [NC]
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
Dans ce cas, une URL de la forme https://example.com/index.php?item=1 sera redirigée vers https://www.example.com/index.php?item=1.
Dans l'exemple ci-dessus :
RewriteConddéfinit une condition de test.%{HTTP_HOST}utilise la variable hôte de la requête (example.com).!signifie NON et^signifie DÉBUT - donc, ne commence pas par www.example.com(et)capturent ce qui se trouve entre les parenthèses pour une utilisation en référence arrière.\transforme le caractère suivant d'un caractère de contrôle en un caractère réel.signifie généralement n'importe quel caractère, mais précédé de \ il signifie un point.?rend la correspondance facultative$signifie FIN (de la correspondance facultative).[NC]signifie No Case, c'est-à-dire insensible à la casse.RewriteRuleest valide si l'URL ne commence pas par www.(.*)est un motif, dans ce cas un caractère unique répété 0 fois ou plus, représentant la partie chemin de l'URL. Elle est capturée en tant que $1.https://www.example.com/est le remplacement pour la partie hôte de l'URL.$1est le chemin capturé.[]contient des indicateurs (flags) - des instructions sur ce qu'il faut faire.R=301est une instruction pour envoyer un en-tête Moved Permanently.Lsignifie Last in set - une correspondance ayant été trouvée, ignorer toutes les règles suivantes.
Une solution plus complète corrigeant plusieurs autres problèmes de canonicalisation en même temps :
RewriteEngine On
#
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.html?\ HTTP/
RewriteRule ^(([^/]+/)*)index\.html?$ http://www.example.com/$1 [R=301,L]
#
RewriteCond %{THE_REQUEST} !^POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.php\ HTTP/
RewriteCond %{SERVER_PORT}>s ^(443>(s)|[0-9]+>s)$
RewriteRule ^(([^/]+/)*)index\.php$ http%2://www.example.com/$1 [R=301,L]
#
RewriteCond %{HTTP_HOST} !^(www\.example\.com)?$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
Si vous souhaitez comprendre tout cela, vous pouvez lire ces articles :