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!