J’ai déjà dit que j’aimais le module Secure Pages pour Drupal 6 qui permet d’implanter le https sur un site: http://onfaitduweb.com/drupal-6/le-lien-entre-le-module-secure-pages-et-imce/. Au fil du temps, on se rend compte cependant que son utilité nécessite des… subtilités. Voici un résumé des éléments de configuration nécessaires.
Supposons que l’adresse du site est http://www.mondomaine.com et que vous désirez que certaines pages servies par Drupal soient accessibles exclusivement sur https://secure.mondomaine.com. Je suppose ici que la configuration du serveur pour servir le domaine sécurisé est faite (autrement dit, si vous placez un fichier test.txt à la racine de votre site, vous pouvez le voir en tapant https://secure.mondomaine.com/test.txt).
Il faut d’abord installer et activer le module Secure Pages. J’ai utilisé la version 6.x-1.8.
Dans le fichier sites/default/settings.php, remplacez la variable $base_url par:
$base_url = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']==’on’) ? ‘https://secure.mondomaine.com’ : ‘http://www.mondomaine.com’);
Cela permet d’éviter d’avoir une erreur d’AJAX interdomaine quand on travaille dans l’admin sécurisé et qu’il y a des appels AJAX, par exemple quand on configure une vue ou qu’il y a de l’autocomplétion d’un champ de type nodereference.
Toujours dans le fichier sites/default/settings.php, assurez-vous que le domaine des cookies est valide autant pour le domaine www.mondomaine.com et secure.mondomaine.com, de cette façon:
$cookie_domain = ‘.mondomaine.com’;
Ajoutez aussi cette ligne, qui est optionnelle mais qui peut vous éviter de chercher un problème qui n’existe pas:
$conf['drupal_http_request_fails'] = FALSE;
Sans cette ligne, lorsque vous visionnerez le tableau de bord (dashboard), Drupal vous indiquera que les appels curl ne fonctionnent pas alors qu’ils fonctionnent probablement.
Dans le fichier .htaccess, pour que la variable $cookie_domain configurée précédemment fonctionne, repérez les lignes suivantes et décommentez/adaptez-les:
# To redirect all users to access the site WITH the ‘www.’ prefix,
# (http://example.com/… will be redirected to http://www.example.com/…)
# adapt and uncomment the following:
RewriteCond %{HTTP_HOST} ^mondomaine\.com$ [NC]
RewriteRule ^(.*)$ http://www.mondomaine.com/$1 [L,R=301]
Plus loin dans le fichier, ajoutez ces lignes pour que https://www.mondomaine.com redirige vers http://www.mondomaine.com et que http://secure.mondomaine.com redirige vers https://secure.mondomaine.com:
# Éviter que la version https des pages soit indexée
RewriteCond %{HTTPS} =on
RewriteRule ^robots\.txt$ robots_ssl.txt [L]
# Éviter que les pages soient accessibles avec http://secure…
RewriteCond %{HTTPS} =off
RewriteCond %{HTTP_HOST} !^www.mondomaine.com$ [NC]
RewriteRule ^(.*)$ http://www.mondomaine.com/$1 [L,R=301]
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} !^secure.mondomaine.com$ [NC]
RewriteRule ^(.*)$ https://secure.mondomaine.com/$1 [L,R=301]
Dans le code précédent vous aurez noté qu’on parle de robots.txt et robots_ssl.txt. En général, on veut que le site principal soit indexé par les moteurs de recherche, mais pas les pages sécurisées. Pour ce faire, laissez intact le fichier robots.txt créé par Drupal mais créez un fichier robots_ssl.txt à la racine avec pour seul contenu les lignes suivantes:
User-agent: *
Crawl-delay: 10 # Ne rien indexer du contenu https. Voir le .htaccess pour la redirection vers le présent fichier
Disallow: /
Ouf! Il ne vous reste plus qu’à retourner dans l’admin de Drupal, menu Construction du site -> Secure Pages et entrer la configuration suivante:
Enable Secure Pages: activé
Switch back to http pages when there are no matches: oui Non-secure Base URL: http://www.mondomaine.com
Secure Base URL: https://secure.mondomaine.com
Make secure only the listed pages: oui
Pages:
node/add*
node/*/edit
user/*
admin*
cart/* [si vous utilisez Ubercart]
n’importe-quelle-autre-page
Ignore pages:
*/autocomplete/*
*/ajax/*
*/imagecache/*
imce*
Videz votre cache et vos cookies, et vous êtes en business.