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.