Je cherchais partout une solution permettant de forcer https: // www devant toutes mes URL à l'aide de l'hôte virtuel. Voici ce que j'ai actuellement dans mon fichier 000-default.conf:
<VirtualHost *:80>
ServerName www.domain.com
Redirect / https://www.domain.com/
</VirtualHost >
Cela signifie que tous les www. serait rediriger vers https: // www.
Maintenant, il me manque le code pour rediriger toutes/toutes les autres formes d'URL vers https: // www . en utilisant le même concept (pas RewriteEngine car Apache suggère de ne pas utiliser RewriteEngine sur des redirections simples).
Par exemple:
ils iraient tous à => https://www.domain.com
Si quelqu'un peut me diriger dans la bonne direction, ce serait génial!
Cela a fonctionné pour moi, vous pouvez le tester sur mon domaine si vous le souhaitez.
<VirtualHost *:80>
ServerName freesoftwareservers.com
ServerAlias *.freesoftwareservers.com
Redirect / https://www.freesoftwareservers.com/
</VirtualHost>
<VirtualHost *:443>
ServerName freesoftwareservers.com
ServerAlias *.freesoftwareservers.com
J'ai eu des problèmes pour ré-implémenter cela, et j'ai constaté que si je supprimais le lien symbolique 000-default.conf de/sites-enabled, cela fonctionnait. Je ne suis pas certain de l’affaire, mais j’ai 0 autres enregistrements DNS du côté DNS et mon Apache effectue toutes les redirections et cela fonctionne.
Vous avez besoin de trois redirections pour faire ce que vous voulez:
http://example.com
à https://www.example.com
http://www.example.com
à https://www.example.com
https://example.com
à https://www.example.com
Les deux premiers sont du port 80 en clair, donc vous avez un VirtualHost pour eux. Vous pouvez faire en sorte qu'une section VirtualHost s'applique à plusieurs noms d'hôte (www.example.com et example.com) en créant une section ServerAlias:
# Redirect http://example.com and http://www.example.com to main site
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
Redirect / https://www.example.com/
</VirtualHost >
Ensuite, vous avez besoin d'un VirtualHost pour votre https://example.com seulement. HTTPS utilise le port 443:
# Redirect https://example.com to main site
<VirtualHost *:443>
ServerName example.com
Redirect / https://www.example.com/
</VirtualHost >
Remarque: vous devrez également y configurer vos paramètres SSL, avec un certificat prenant en charge le domaine avec et sans le "www.". La configuration de vos paramètres SSL n’entre pas dans le cadre de cette question. ( Ajout d'informations: il peut s'agir de deux certificats distincts si vous le souhaitez; il est de plus en plus courant de disposer de nombreux certificats séparés. Nous avons maintenant des éléments tels que Let's Encrypt et SNI )
Si vous ne possédez pas de certificat SSL prenant en charge votre domaine sans le "www." Dans ce cas, vous ne pourrez pas faire la redirection à partir de https://example.com
. La redirection n'aura lieu que lorsque le navigateur aura vérifié le certificat. L'utilisateur serait présenté avec une erreur de certificat incompatible.
Enfin, vous avez besoin de votre section VirtualHost pour le site "valide": HTTPS (port 443) sur www.example.com:
# Main site
<VirtualHost *:443>
ServerName www.example.com
# Put all your configuration for this site here
</VirtualHost >
Une fois que vous avez testé vos redirections et que vous êtes satisfait de leur fonctionnement, vous pouvez les rendre permanentes en spécifiant le statut 301 dans la redirection (remplacez Redirect / https://www.example.com/
par Redirect 301 / https://www.example.com/
partout) et en activant HSTS qui oblige les navigateurs des utilisateurs à se souvenir de leur préférence pour HTTPS.
Pour ajouter à la réponse de thomasrutter, j'avais toujours un problème quand je faisais ce qu'il suggérait. Parfois, vous devrez peut-être ajouter les informations SSL à l'hôte virtuel https://example.com . Par exemple, lorsque vous utilisez SNI pour autoriser plusieurs certificats SSL par adresse IP.
Sans cela, vous risquez d'obtenir l'erreur ssl_error_rx_record_too_long, car le serveur retournera du texte brut à la requête https.
# Redirect https://example.com to main site
<VirtualHost *:443>
ServerName example.com
Redirect / https://www.example.com/
#for Apache Old Style (Valid on Apache <= 2.4.8) - just add in whats needed for your version
SSLEngine on
SSLCertificateFile "your certificate file.crt"
SSLCertificateKeyFile "your key file.key"
SSLCertificateChainFile "your chain file.crt"
</VirtualHost >