Il est possible de rediriger une IP vers un domaine avec Apache en utilisant le module mod_rewrite, nous allons voir comment le faire avec l'utilisation d'un VirtualHost ou d'un fichier .htaccess.
Activer mod_rewrite
Ce module permet de modifier dynamiquement les URL demandées grâce à un moteur de réécriture qu'il fournit.
Pour activer le module, il faut entrer la commande suivante :
sudo a2enmod rewrite
Il faut ensuite recharger Apache :
sudo systemctl restart apache2
Pour vérifier que le module est bien actif nous pouvons utiliser :
sudo apache2ctl -M | grep rewrite
Si le module est activé, le résultat sera rewrite_module (shared).
Configuration avec un VirtualHost
Pour configurer la redirection, il faut éditer le fichier de configuration du site ou la configuration par défaut (exemple: /etc/apache2/sites-available/000-default.conf) :
<VirtualHost *:80>
ServerName 192.168.0.1
DocumentRoot /var/www/monsupersite
#Activer le moteur de réécriture
RewriteEngine On
#Vérifie si l'hôte de la requête correspond à l'adresse IP
RewriteCond %{HTTP_HOST} ^192\.168\.0\.1$ [OR]
#Vérifie si l'en-tête est vide
RewriteCond %{HTTP_HOST} ^$
#Redirige le trafic vers le domaine indiqué en conservant le chemin de base (/posts par exemple)
RewriteRule ^(.*)$ https://monsupersite.fr/$1 [R=301,L]
</VirtualHost>
Informations importantes :
^(.*)$capture tout ce qui suit l'IP (par exemple /posts) et le réinjecte dans l'URL grâce à$1\.est utilisé plutôt que.car en expression régulière, un point seul correspond à "n'importe quel caractère", l'ajout d'un\annule cet effet.[R=301,L]permet lui d'indiquer que c'est la dernière règle et que la redirection est permanente.
Pour que la configuration soit prise en compte, il ne reste plus qu'à redémarrer Apache :
sudo systemctl reload apache2
Puis tester la nouvelle configuration pour vérifier qu'elle est bien prise en compte :
curl -I http://192.168.0.1
Le résultat devrait être HTTP/1.1 301 Moved Permanently ainsi que Location:https://monsupersite.fr.
Configuration avec l'utilisation du .htaccess
Il faut autoriser les réécritures dans le fichier de configuration du site (exemple : /etc/apache2/sites-available/000-default.conf) :
<Directory /var/www/html>
AllowOverride All
</Directory>
All peut être remplacé par FileInfo pour plus de sécurité, cette option est plus limitante dans les opérations autorisées mais répond à notre besoin, plus d'informations dans la documentation officielle.
Puis relancer de nouveau Apache :
sudo systemctl reload apache2
Il ne reste plus qu'à créer ou modifier le .htaccess du site :
#Activer le moteur de réécriture
RewriteEngine On
#Vérifie si l'hôte de la requête correspond à l'adresse IP
RewriteCond %{HTTP_HOST} ^192\.168\.0\.1$ [OR]
#Vérifie si l'en-tête est vide
RewriteCond %{HTTP_HOST} ^$
#Redirige le trafic vers le domaine indiqué en conservant le chemin de base (/posts par exemple)
RewriteRule ^(.*)$ https://monsupersite.fr/$1 [R=301,L]
Informations importantes :
^(.*)$capture tout ce qui suit l'IP (par exemple /posts) et le réinjecte dans l'URL grâce à$1\.est utilisé plutôt que.car en expression régulière, un point seul correspond à "n'importe quel caractère", l'ajout d'un\annule cet effet.[R=301,L]permet lui d'indiquer que c'est la dernière règle et que la redirection est permanente.
Puis tester la nouvelle configuration pour vérifier qu'elle est bien prise en compte :
curl -I http://192.168.0.1
Le résultat devrait être HTTP/1.1 301 Moved Permanently ainsi que Location:https://monsupersite.fr.
Maintenant, la configuration vérifie si l'IP est bien celle du serveur et redirige le trafic avec une redirection 301.