Drupal : rediriger votre site vers un sous répertoire
Dans les hebergements mutualisés le domaine principale pointe sur /public_html. Ce comportement par defaut peu poser quelques soucis si votre installation de Drupal separe index.php et vendor.
Pour regler le probleme nous allons prendre un cas pratique.
Nous avons une installation Drupal qui suit la logique suivante:
- public
- public/web/index.php
- public/vendor/
Nous compressons notre le dossier public et le mettons le dossier public_html sur le serveur. Ensuite on dezzipe et on a : public_html/public/.
Pour acceder au site : il faut ecrire : mon.domaine.com/public/web,
Pour pouvoir acceder au site directement à partir du domaine nous devons :
- Ajouter à la racine du serveur un fichier .htaccess
RewriteEngine on
# Rediregiger vers un sous parrent.
RewriteCond %{HTTP_HOST} ^(www\.)?mondomaine\.com$
RewriteCond %{REQUEST_URI} !core/authorize.php
RewriteRule !^public/web/ /public/web%{REQUEST_URI} [L]
- Ajouter la ligne suivante à la fin du fichier settings.php
# Pour la redirection.
if (isset($GLOBALS['request'])) {
if ('/public/web/index.php' === $GLOBALS['request']->server->get('SCRIPT_NAME')) {
$GLOBALS['request']->server->set('SCRIPT_NAME', '/index.php');
}
elseif ($GLOBALS['request']->server->get('SCRIPT_URL') === '/core/authorize.php') {
$GLOBALS['request']->server->set('SCRIPT_FILENAME', '/public/web/core/index.php');
}
}
# Vous pouvez également utiliser le chemins absolue complet
if (isset($GLOBALS['request']) and '/public/web/index.php' === $GLOBALS['request']->server->get('SCRIPT_NAME')) {
$GLOBALS['request']->server->set('SCRIPT_NAME', '/index.php');
}