Protéger un vhost de backoffice Drupal via le .htaccess
Dans le cas d'un serveur "mutualisé"[1]:Pas d'accès aux fichiers de configuration des vhosts mais des .htaccess. [2]
La configuration choisie est la suivante:
Deux VHOSTS pour le même DocumentRoot:
- backoffice.domaine.com
- www.domaine.fr
...qui ont tous deux le même document root /var/www/site/html
Principe cette de sécurisation:
Lorsque le HTTP-HOST est backoffice.domaine.com
Une authentification de type BASIC est demandée (elle s'ajoutera à l'authentification Drupal). Ça permet aussi que l'URL du backoffice ne puisse pas être indexée par des bots, elle reste ainsi relativement confidentielle.
Lorsque le HTTP-HOST est www.domaine.com
Pas d'authentification, accès libre, mais le site ne permet pas l'accès aux URL qui devraient être réservées aux contributeurs.
Le .htaccess:
Ajoutez ce premier bloc au début qui permet de ne demander le password que si l'url n'est pas celle du site frontal.
#Authentification pour le backoffice SetEnvIfNoCase Host www\.domaine\.com frontal AuthType Basic AuthName "Authentification requise" AuthUserFile /var/www/site/.htpasswd Require valid-user Order allow,deny Allow from env=frontal Satisfy any
Dans le bloc des url rewritting, on ajoute:
#bloquer l'acces aux URL d'admin RewriteCond %{HTTP_HOST} ^www\.domaine\.com RewriteCond %{REQUEST_URI} ^/(index\.php|user|admin|users|update|install|flag) RewriteRule . - [R=403,NC,L] RewriteCond %{HTTP_HOST} ^www\.domaine\.com RewriteCond %{REQUEST_URI} "node/(.*)/edit" RewriteRule . - [R=403,NC,L]
Voila. C'est pour Drupal 7, il est possible que pour Drupal 8 les RewriteRule soient à adapter. Et de façon générale, ce principe peut s'appliquer à d'autres CMS pour lesquels l'interface d'édition est mélangée avec l'affichage du site.