D7 Multiple site

TommyChris képe

Ezen bejegyzés nem kérdés lesz, hanem inkább egy leírás, hogy aki ugyanebbe a problémába esne, annak ne kelljen ennyit szenvednie vele.

Már egy ideje üzemeltetek több Drupal oldalt is multisite megoldással, azaz 1 kódbázis, és több domaint is kiszolgál. Ennek előnyeiről-hátrányairól nem szólok, mindenki utánanézhet, ám én eljutottam oda, hogy több volt a hátrányom, mint előnyöm, így arra jutottam, hogy kiszervezem a telepítéseket, és az eddigi gyökérben levő D7 telepítésből csinálok 4-et, mindegyiket külön-külön almappába.

Ezzel még nem is lenne gond, de a domaincímek a gyökérbe mutattak, s nem volt lehetőségem a domainek megváltoztatására, se az Apache-ban újabb virtualhostokat létrehozni. Tehát adott volt egy MySQL és FTP hozzáférésem, ebből kellett élni.

Az már az elején nyilvánvalóvá vált, hogy a .htaccess fájllal kell szórakozni, de minthogy olyat fejből nem tudok írni, ezért elkezdtem neten keresgélni, ahol csupa elavult információ volt fellelhető. D4.6-hoz, meg D5, D6-hoz találtam leírásokat, illetve bárki aki olyan kérdést tett fel, hogy nah milyen legyen a .htaccess, olyna választ kapott, hogy inkább csinálj új VirtualHost-ot. A külföldi fórumok egyik baja, hogy mindenki más megoldást akar javasolni a problémára, de a tényleges kérdésre igen ritkán válaszolnak - pontosan tudom, hogy miért azt a kérdést tettem fel.

Ahhoz, hogy minden drupal telepítés almappában legyen, úgy, hogy a domain a gyökérre mutat, 3 fájlt érintett módosítás:

  • /.htaccess
  • /subfolderformydomain/.htaccess
  • /subfolderformydomain/sites/default/settings.php

Kezdjük a /.htaccess-el. Ide mutat több domain cím is, ez lesz a webszerver által először lefuttatott .htaccess. Ez volt a legkritikusabb, de sikerült egy több helyről összeollózott .htaccess fájlt csinálnom:

Options -Indexes
Options +FollowSymLinks
 
RewriteEngine on
 
# Redirect all user to without WWW
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]
 
# START: mydomain.hu a subfolderformydomain.hu almappából kiszolgálva
RewriteCond %{HTTP_HOST} ^mydomain\.hu$ [NC]
RewriteRule ^$ subfolderformydomain.hu/index.php [L]
 
RewriteCond %{HTTP_HOST} ^mydomain\.hu$ [NC]
RewriteCond %{DOCUMENT_ROOT}/subfolderformydomain.hu%{REQUEST_URI} -f
RewriteRule .* subfolderformydomain.hu/$0 [L]
 
RewriteCond %{HTTP_HOST} ^mydomain\.hu$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* subfolderformydomain.hu/index.php?q=$0 [QSA]
# END: mydomain.hu a subfolderformydomain.hu almappából kiszolgálva

Ezzel a .htaccess fájllal a szép url-ek is működnek, a frissítési lekérdezések, egyszóval minden. Minden egyes domain-hez a START - END közötti blokkot le kell másolni, és értelemszerűen módosítani.

Másik fájl volt a /subfolderformydomain/.htaccess. Itt az a fontos, hogy a RewriteBase minden esetben ki legyen kommentezve (alapból így adja a Drupal).

  # Modify the RewriteBase if you are using Drupal in a subdirectory or in a
  # VirtualDocumentRoot and the rewrite rules are not working properly.
  # For example if your site is at http://example.com/drupal uncomment and
  # modify the following line:
  # RewriteBase /drupal
  #
  # If your site is running in a VirtualDocumentRoot at http://example.com/,
  # uncomment the following line:
  # RewriteBase /

Végül a 3. fájl a /subfolderformydomain/sites/default/settings.php, ebben két rész ami releváns. Az egyik a $base_url változó, ezt meg kell adni oly formában, hogy a domain cím legyen, esetünkben:

 $base_url = 'http://mydomain.hu';  // NO trailing slash!

A másik pedig a $cookie_domain, ezt viszont nem kell megadni, kikommentezve kell (lehet (?)) hagyni:

 #$cookie_domain = 'mydomain.hu';

Ha ezen pár fájlt megfelelően módosítjuk, akkor ki fogunk tudni szolgálni egy Virtualhostról több Drupal oldalt, úgy, hogy nem osztoznak a kódbázison, s mindegyik saját almappában van (asszem ezt hívják Multiple Installnak, míg a kódbázis osztozást Multisite-nak).

Kis kiegészítés:
Felmerülhet bennünk az igény egy olyan oldal készítésére, ami almappában mutatja is magát, tehát http://mydomain.hu/dev címen (nekem innen indult ki az egész, hogy a dev kódbázisa nem akartam, hogy osztozzon az éles rendszerekével). Ez esetben megcsináljuk FTP-n a szokásos dev mappát, belemásoljuk a Drupal telepítőt, s a fent megnevezett 3 fájl az alábbiak szerint módosul:

/.htaccess
Nem kell módosítani benne semmit

/subfolderformydomain/.htaccess
Meg kell adni a # RewriteBase /drupal részt, azaz kivenni a kommentet, és átírni a mappát:
RewriteBase /dev

/subfolderformydomain/sites/default/settings.php
Ki kell egészíteni a  $base_url -t, és meg kell adni a  $cookie_domain -t is!

$base_url = 'http://mydomain.hu/dev';  // NO trailing slash!
$cookie_domain = 'mydomain.hu/dev';

Remélem az iromány hasznos volt, kérdések bátran jöhetnek!

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: