Sur mon serveur Apache, j'aimerais pouvoir rediriger toutes les demandes http entrantes vers la demande https équivalente. Le problème est que j'aimerais pouvoir effectuer cette opération pour mon hôte virtuel par défaut sans spécifier le paramètre ServerName
et que la redirection fonctionne avec le nom du serveur figurant dans l'URL de la demande. J'espère quelque chose comme ça:
NameVirtualHost *:80
<VirtualHost *:80>
RedirectPermanent / https://%{SERVER_NAME}/
...
</VirtualHost>
Est-ce possible d'utiliser Redirect
ou devrais-je recourir à Rewrite
?
Essayez d’ajouter ceci dans votre configuration vhost:
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_Host}$1 [R=301,L]
Les deux fonctionnent bien. Mais selon le Apache docs , vous devriez éviter d'utiliser mod_rewrite
pour les redirections simples, et utilisez plutôt Redirect
. Donc, selon eux, vous devriez faire de préférence:
<VirtualHost *:80>
ServerName www.example.com
Redirect / https://www.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName www.example.com
# ... SSL configuration goes here
</VirtualHost>
La première /
après Redirect
est l'URL, la deuxième partie est l'endroit où il devrait être redirigé.
Vous pouvez également l'utiliser pour rediriger des URL vers un sous-domaine: Redirect /one/ http://one.example.com/
C’est aussi le moyen idéal d’omettre les redirections inutiles;)
Ces règles sont destinées à être utilisées dans les fichiers .htaccess, comme une RewriteRule dans une entrée *: 80 VirtualHost ne nécessite aucune condition.
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^/(.*) https://%{HTTP_Host}/$1 [NC,R=301,L]
Eplanations:
RewriteEngine on
==> activer le moteur du tout
RewriteCond %{HTTPS} off [OR]
==> correspondance sur les connexions non-https, ou (ne pas définir [OR] provoquerait un ET implicite!)
RewriteCond %{HTTP:X-Forwarded-Proto} !https
==> correspondance sur les connexions transférées (proxy, loadbalancer, etc.) sans https
RewriteRule ^/(.*) https://%{HTTP_Host}/$1 [NC,R=301,L]
==> si l'une des deux conditions correspond, effectuez la réécriture de l'URL complète en envoyant un message 301 pour que le client "l'apprenne" (certains le font, d'autres pas) et le L pour la dernière règle.