Résoudre les problèmes liés aux URL propres dans Drupal 8
Les bases
Dans Drupal 8, les URL propres sont activées par défaut et ne peuvent pas être désactivées. Cependant, le module de réécriture doit être activé sur votre serveur web.
Vérifiez la barre d’adresse de votre navigateur. Les URL de votre site ne doivent pas contenir « ?q= » dans l’URL.
Exemple d’URL propres correctes :
http://www.example.com/node/83
Exemple d’URL propres qui ne fonctionnent pas :
http://www.example.com/?q=node/83
Des instructions supplémentaires existent pour configurer les URL propres selon différents systèmes, tels qu’Apache, WAMP, XAMPP ou IIS.
Configuration du serveur pour les URL propres
Vous pouvez en apprendre plus sur les autres exigences serveur web.
Configuration serveur pour URL propres sur serveur dédié avec httpd.conf
Pour activer les URL propres sur un serveur dédié, suivez ces étapes :
1. Activez mod_rewrite pour Apache. Contactez votre hébergeur ou consultez la documentation Apache sur mod_rewrite pour savoir comment faire. Assurez-vous que mod_rewrite est bien activé dans votre installation Apache.
Pour vérifier si mod_rewrite est disponible, exécutez en ligne de commande :
apache2ctl -M
Selon le système, cette commande peut être :
apachectl -M
ou
httpd -M
2. Dans la sortie, vérifiez que rewrite_module est activé.
Si mod_rewrite n’apparaît pas, vous devez le compiler ou le rendre disponible comme module chargé. Généralement, ajoutez dans votre fichier de configuration Apache :
LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c
Décommentez la ligne AddModule si elle est commentée. Vous pouvez aussi tenter la commande :
a2enmod rewrite
Notez que ces commandes peuvent varier selon OS et version d’Apache. Consultez la documentation Apache adaptée.
N’oubliez pas de redémarrer Apache pour appliquer les changements.
3. Trouvez le fichier de configuration Apache approprié pour votre site (httpd.conf, vhost.conf, apache2.conf, ou fichier spécifique à votre site). Ils se situent souvent dans /etc/httpd/conf, /etc/apache2, etc. Utilisez :
find /etc -name httpd* ou find /etc -name apache2*
si besoin pour localiser ces fichiers.
Si vous n’avez pas les droits d’écriture sur ces fichiers, et que les URL propres ne fonctionnent pas, demandez de l’aide à votre administrateur système ou hébergeur. Vous pouvez néanmoins consulter ces fichiers pour aider au diagnostic.
4. Intégrez les directives Drupal dans le fichier de configuration. Voir les instructions pour inclure les directives Drupal. Par exemple, le fichier .htaccess de Drupal 8 contient :
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^ index.php [L]
Ou cet exemple Debian 8 + Apache2 + ISPConfig :
<Directory /var/www/clients/*/*/web/> RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </Directory>
Assurez-vous d’utiliser le .htaccess correspondant à votre version Drupal (8.x).
Note : si vous préférez ne pas placer les règles dans le fichier de config Apache, vous pouvez utiliser le fichier .htaccess de Drupal (comme sur un hébergement mutualisé). Assurez-vous que la directive AllowOverride est bien définie :
AllowOverride All AccessFileName .htaccess
Pour en savoir plus, consultez cette présentation détaillée du .htaccess Apache et les exemples de directive AllowOverride d’Apache 2.
Attention à MultiViews : Apache supporte une fonction « MultiViews » permettant d’accéder aux fichiers sans extension (ex : valuation.txt accessible via /valuation). Bien que pratique, MultiViews peut causer des conflits avec les URL propres de Drupal. Si vous ne maîtrisez pas, désactivez MultiViews pour éviter les problèmes. Cette option n’est pas activée par défaut sur Apache.
Configuration serveur pour URL propres sur hébergement mutualisé avec .htaccess
Drupal fournit un fichier .htaccess standard suffisant pour activer les URL propres. Ce fichier commence par un point, il peut donc être masqué. Vérifiez sa présence dans votre installation avec la commande :
ls -a
Si le fichier est présent mais que les URL propres ne fonctionnent pas, essayez les conseils de dépannage ci-dessous. Sinon, contactez votre hébergeur.
Dépannage
Vérifiez que .htaccess est utilisé
Apache doit être configuré pour lire et appliquer les règles du fichier .htaccess. Par défaut, cela peut être désactivé, mais la plupart des hébergeurs l’activent. La directive AllowOverride All permet cette activation.
Pour tester, ajoutez temporairement une ligne invalide dans .htaccess. Votre site doit alors afficher une erreur 500 lors du chargement. Retirez la ligne après le test.
Si le site ne casse pas, .htaccess est ignoré. Vous devrez activer cette option dans httpd.conf ou via votre hébergeur.
Configurer RewriteBase
La directive principale à modifier est RewriteBase, dans .htaccess ou httpd.conf selon l’emplacement des règles.
Par défaut, RewriteBase est commenté dans .htaccess, et fonctionne dans de nombreuses configurations.
Si vous avez des soucis, et que votre Drupal est installé dans un sous-dossier, par exemple /var/www/monsite, définissez :
RewriteBase /monsite
Parfois, RewriteBase /
peut suffire.
Variable $base_url
Vous devrez peut-être définir manuellement la variable $base_url
dans settings.php si elle n’est pas configurée. Ceci est connu pour poser problème avec certains serveurs utilisant FastCGI (bug PHP #19656).
Multi-site
RewriteBase fonctionne si votre Drupal sert un seul site, ou plusieurs sites dans un même sous-répertoire.
RewriteBase /
fonctionne sur :
http://www.example.com/
http://www.example2.com/
http://www.example3.com/
RewriteBase /monsite
fonctionne sur :
http://www.example.com/monsite
http://www.example2.com/monsite
http://www.example3.com/monsite
Mais si vos sites sont dans différents sous-répertoires, RewriteBase ne fonctionnera pas. Vous devez créer une règle spécifique pour chaque sous-répertoire. Par exemple, si votre Drupal sert :
http://www.example.com/
http://www.example.com/monsite
Pour activer les URL propres pour les deux, ajoutez avant les règles existantes :
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^/monsite/ RewriteRule ^ /monsite/index.php [L]
Emplacement du fichier index.php
Selon la configuration, vous devrez peut-être modifier la règle :
RewriteRule ^ index.php [L]
en remplaçant index.php par le chemin relatif vers index.php de votre Drupal. Par exemple, si votre site est accessible via http://example.com/subdir/, utilisez :
/subdir/index.php
ou /index.php si votre Drupal est à la racine. Ceci dépend de la configuration serveur.
Générez des URL conviviales avec le module Path
Les URL propres génèrent des liens comme http://www.example.com/node/83. Pour remplacer la partie « node/## » par un alias plus lisible (ex. « news/mon-article »), activez le module Path. Voir la page de documentation du module Path pour plus d’infos.