web-dev-qa-db-fra.com

Préserver l'alias de domaine

J'ai un seul site Wordpress installé sur example.com. Le DNS est configuré pour que www.example.com soit un ALIAS d’exemple.com. Le client veut que l'utilisateur voie www. sur leur barre de navigation s’ils y sont entrés, c’est donc important.

J'ai hébergé leur site Web sur un serveur Apache exécutant cpanel. Le cpanel a le domaine défini comme exemple.com. Avant d’installer Wordpress, saisir www.example.com ouvrait le répertoire et conservait le site www. sur le bar de navigation, tout simplement génial.

Après avoir installé WordPress, le www. est enlevé. Lorsque j'ai fait une trace de redirection, j'ai trouvé cette redirection impaire 302:

http://www.example.com
Status: 302 Found
Code:   302
Date:   Thu, 24 Aug 2017 00:23:08 GMT
Server: Apache/2.4.16 (Unix) OpenSSL/1.0.1e-fips mod_bwlimited/1.4
Location:   https://example.com
Content-Length: 346
Connection: close
Content-Type:   text/html; charset=iso-8859-1

J'ai modifié le fichier htaccess de wordpress pour forcer ssl, mais je pensais que c'était un 301:

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_Host} eq "example.com"
ErrorDocument 403 https://example.com

OK peu importe. J'ai donc supprimé cette section de code, la barre d'URL ne conserve toujours pas le www. Cette fois, je reçois une redirection 301:

http://www.example.com
Status: 301 Moved Permanently
Code:   301
Date:   Thu, 24 Aug 2017 00:35:22 GMT
Server: Apache/2.4.16 (Unix) OpenSSL/1.0.1e-fips mod_bwlimited/1.4
X-Powered-By:   PHP/5.6.16
Location:   http://example.com/
Content-Length: 0
Connection: close
Content-Type:   text/html; charset=UTF-8

Je ne sais pas où chercher. Que dois-je faire dans cpanel, htaccess ou wordpress pour que la barre d’URL conserve le www.

1
Kumar

Vous devez définir le nom d’hôte canonique (c.-à-d. Avec www) dans le tableau de bord WordPress ... Sous Paramètres> Général, puis définissez les propriétés appropriées "Adresse WordPress (URL)" et "Adresse du site (URL)".

Sinon, ces valeurs peuvent être hardcoded in wp_config.php en définissant les constantes WP_HOME et WP_SITEURL respectivement.

Référence:
https://codex.wordpress.org/Changing_The_Site_URL

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_Host} eq "example.com"
ErrorDocument 403 https://example.com

Un peu de côté, mais c’est un moyen très détourné (non recommandé) de redirecting to HTTPS. Oui, cela déclenchera une redirection 302 (temporaire), pas une redirection 301 (permanente). Cela ne fait que rediriger du tout en raison d'un effet secondaire de ErrorDocument. Et il ne redirige que vers la racine du document, l'URL demandée est perdue.

Ce code bloque en fait l'accès au site HTTP uniquement et déclenche un message 403 Forbidden. Étant donné que vous avez défini une URL absolue en tant que deuxième argument du 403 personnalisé, Apache déclenche une redirection externe (302) vers l'URL, la racine de votre site.

Si vous n'avez pas accès à la configuration du serveur, cette redirection est normalement réalisée à l'aide de mod_rewrite dans .htaccess. Par exemple:

RewriteCond %{HTTPS} !on
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]

Cela devrait aller avant les directives WordPress existantes dans .htaccess.


Une fois que vous avez défini le nom d’hôte approprié dans WordPress, vous pouvez gérer la redirection HTTPS et www dans .htaccess si vous le souhaitez (ce serait légèrement plus efficace). Par exemple:

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_Host} !www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]

Assurez-vous d'effacer le cache de votre navigateur avant de tester.


J'ai besoin du www. préservé que si l'utilisateur l'a entré pour commencer.

À moins que vous n'ayez une raison spécifique de le faire, c'est généralement une mauvaise idée. Cela crée potentiellement duplicate content , bien que vous puissiez définir une balise rel="canonical" dans la section head pour y remédier, et vous pouvez spécifier une préférence dans la console de recherche Google (pour éviter que les deux hôtes ne soient indexés). Mais les statistiques seront partagées entre eux. Comment installez-vous les cookies? Si vous souhaitez que les cookies soient partagés entre www et non-www (connexion, sessions, etc.), vous devez vous assurer que les cookies sont configurés sur le domaine apex, quel que soit l'hôte auquel vous avez accédé. Je ne crois pas que ce soit le cas. le comportement par défaut.

Quoi qu'il en soit, si vous souhaitez rediriger HTTP vers HTTPS tout en conservant l'hôte auquel vous avez accédé (alias www, non-www ou xyz), il s'agit d'une redirection beaucoup plus simple car vous pouvez référencer la variable serveur HTTP_Host. Par exemple:

RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
1
MrWhite

Changer le nom d’hôte canonique dans wordpress signifie que tout le trafic devient maintenant www. Dans ce cas d'utilisation particulier, uniquement si l'utilisateur entre en tant que www. le trafic devrait-il continuer à voir des URL www. Sinon, ils devraient simplement voir example.com, juste comme ils l'ont entré. Après avoir fait quelques recherches supplémentaires, j'ai trouvé qu'un moyen de le faire est d'ajouter les lignes suivantes à wp_config.php.

define('WP_SITEURL', 'http://' . $_SERVER['HTTP_Host']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_Host']);

D'après ce que je comprends de ce code, toute URL déclarée comme un alias pour example.com dans le DNS et dans Cpanel affichera le site wordpress avec les URL conservées.

Pour suivre le conseil SSL de MrWhite, j'ai légèrement modifié son code pour tenir compte du fait que deux URL (avec et sans www) doivent être autorisées:

# Force SSL While Preserving www.#
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_Host} www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]

# Force SSL for non-www. Traffic #
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_Host} !www\.
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]

Si un troisième ou quatrième alias etc. doit être ajouté, RewriteCond devra être plus spécifique et des blocs de réécriture supplémentaires seront nécessaires.

0
Kumar