web-dev-qa-db-fra.com

Ces 3 règles de redirection sont-elles égales?

Je souhaite rediriger les versions non https et non www de mon domaine vers les versions https et www de celui-ci. Je suis un peu confus par les options. Ces règles de redirection sont-elles égales pour mon propos?

#  REDIRECT (non-HTTPS or non-WWW) TO HTTPS and WWW
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} !^www\. [NC]
# Are the following 3 rules equal in effect?
RewriteRule ^(.*)$ https://www.example.com%{REQUEST_URI} [L,R=301]
RewriteRule ^(.*)$ https://www.%{HTTP_Host}/$1 [R=301,L]
RewriteRule ^(.*)$ https://www.%{HTTP_Host}{REQUEST_URI} [R=301,L]

Lequel devrais-je utiliser?

2
IXN
  1. RewriteRule ^(.*)$ https://www.example.com%{REQUEST_URI} [L,R=301]
  2. RewriteRule ^(.*)$ https://www.%{HTTP_Host}/$1 [R=301,L]
  3. RewriteRule ^(.*)$ https://www.%{HTTP_Host}{REQUEST_URI} [R=301,L]

Ces 3 règles sont essentiellement les mêmes et feront le même travail dans la plupart des situations. Cependant, N ° 1 est sans doute "meilleur" puisqu'il canonise un nom de domaine complet (où le nom d'hôte se termine par un point) et serait donc la version préférée. (En supposant que vous n'avez pas d'autres directives qui le font.)

Dans un contexte .htaccess, les numéros 2 et 3 sont identiques. (Cependant, dans un contexte serveur ou hôte virtuel, la valeur # 2 est techniquement incorrecte, car elle entraînerait une double barre oblique après le nom d'hôte.)

Les 3 versions (ainsi que la directive RewriteCond) supposent que vous ne possédez aucun autre sous-domaine, puisque tout autre que www. est redirigé.

  1. RewriteRule ^(.*)$ https://www.example.com%{REQUEST_URI} [L,R=301]
  • Il n’est pas nécessaire de créer un sous-motif de capture dans la regex s’il n’existe pas de référence arrière (par exemple, $1) dans sous-fonction. Vous utilisez plutôt la variable de serveur REQUEST_URI.
  • L'ordre des drapeaux L et R n'a pas d'importance. Cependant, par souci de cohérence, j'inclus toujours le drapeau L (last) dernier.

En d'autres termes:

RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
2
MrWhite