Rediriger le trafic vers le port 443 sous Apache
Alias n'est pas qu'une commande Unix
Continuons dans la série documentons un peu la configuration du serveur sur le blog
. Voyons désormais comment rediriger simplement le trafic de http
à https
dans Apache.
Traditionnellement, les tutoriaux glanés sur le Web conseillent d'utiliser le mod_rewrite
, or celui-ci est complexe, pas super intuitif et sa syntaxe n'est pas très lisible :
<VirtualHost *:80>
...
RewriteEngine on
ReWriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=308,L]
Petite aparté avant d'aller plus loin, les redirections permanentes sont désormais à gérer via un code de réponse 308 définit dans le RFC 7538 (en résumé : c'est presque la même chose que le code 301, à la différence qu'il est maintenant impossible de changer de méthode HTTP
, un POST
en GET
par exemple. Par ailleurs, ce code n'est pas encore implémenté dans Internet Explorer – à voir si Edge le connaît – ce qui permet de troller un peu les utilisateurs de cette chose 😊). Bref, 3 directives pour une bête redirection... Le mod_alias
permet de faire la même chose en une seule directive parfaitement claire et lisible.
Il faut d'abord s'assurer que le module est bien chargé :
# a2enmod alias Module alias already enabled
mod_alias
est normalement chargé par défaut avec la configuration de base d'Apache, dans tous les cas, ça ne coûte pas grand chose de vérifier. Une fois le module actif, on modifie le fichier de configuration pour remplacer les directives du mod_rewrite
par :
<VirtualHost *:80>
...
Redirect 308 "/" "https://www.shaftinc.fr/"
On relance le serveur, et c'est tout. Toutes les requêtes vers le port 80 seront correctement redigées vers le port 443. On s'assure que le serveur a bien le comportement souhaité :
# curl -i http://www.shaftinc.fr/url-bidon HTTP/1.1 308 Permanent Redirect Date: Fri, 29 Dec 2017 01:08:58 GMT Server: Apache Location: https://www.shaftinc.fr/url-bidon Content-Length: 239 Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>308 Permanent Redirect</title> </head><body> <h1>Permanent Redirect</h1> <p>The document has moved <a href="https://www.shaftinc.fr/url-bidon">here</a>.</p> </body></html>
Parfait ! Un navigateur moderne suivra automatiquement la ressource indiquée dans l'entête Location
. Les autres verront la page HTML générée par le serveur. Si vous souhaitez utiliser le code de réponse 301 au lieu de 308, le mod_alias
possède une directive spécifique : il suffit dans ce cas de remplacer Redirect 308
par RedirectPermanent
.
Bonus : le mod_alias
peut également être utilisé pour troller un peu sans efforts. Sur ce serveur Web, les requêtes GET /wp-login.php
(page de login par défaut des sites sous WordPress) que spamment des bots sont ainsi redirigées :
<Directory /var/www/>
...
RedirectPermanent "/wp-login.php" "https://www.google.com/?q=wordpress+for+dummies"
Il est possible de remplacer Google par un autre moteur (fonctionne avec Bing, Duckduckgo et Qwant, il suffit de changer l'autorité – RFC 3986 section 3.2 – de l'URL).