Drupal pod kontrolą Lighttpd - opis konfiguracji.


Domyślnie skonfigurowany serwer (z obsługą PHP) jest w stanie poprawnie obsłużyć Drupala, jednak bez dodania rozszerzonych opcji nie uzyskamy np. przyjaznych adresów (clean urls). Moduł mod_rewrite jest domyślnym komponentem serwera Lighttpd, więc wystarczy dodać do sekcji modułów obsługę mod_rewrite:
server.modules = ( ..., "mod_rewrite", ... )
Następnie w konfiguracji hosta dodajemy konfigurację modułu rewrite.

  1.    url.rewrite-final = (
  2.                           "/rss.xml$" => "/index.php?q=rss.xml",
  3.                           "^/([^.?]*)\?(.*)$" => "/index.php?q=$1&$2",
  4.                           "^/search/(.*)$" => "/index.php?q=search/$1",
  5.                           "^/([^.?]*)$" => "/index.php?q=$1",
  6.                           "^/([^.?]*\.html)$" => "/index.php?q=$1",
  7.                           "^/([^.?]*\.htm)$" => "/index.php?q=$1"
  8.                         )

Dwa ostatnie wiersze z końcówkami .html nie są wymagane, akurat projekt na którego konfiguracji się opieram ma aliasy z suffixem .html.
Teraz możemy włączyć obsługę przyjaznych adresów w naszym Drupalu.

Niestety nie jest to tak piękne i bezbłędne rozwiązanie - jakbyśmy chcieli. Specyficznym modułem który wymaga przyjaznych adresów i nie zadziała w powyższej konfiguracji jest imagecache. Moduł ten pozwala na automatyczne operacje na obrazkach (skalowanie, wycinanie fragmentów itp.) w połączeniu z modułem CCK to bardzo potężne narzędzie – zachęcam do zapoznania się z jego możliwościami. Jednak jego specyficzność zakłada, przechwytywanie odwołań do katalogu files/imagecache/(...) - w Apaeche'u mod_rewrite w plikach .htaccess rozwiązywał problem w prosty sposób:

  1.   RewriteCond %{REQUEST_FILENAME} !-f
  2.   RewriteCond %{REQUEST_FILENAME} !-d

Te dwie linijki rozwiązywały cały problem – jeżeli istnieje taki plik (-f) lub katalog (-d) to regułka jest pomijana (w powyższym przykładzie zastosowano negację !), zastosowanie reguły rewrite miało miejsce w przypadku kiedy nie było takiego pliku albo katalogu. Czyli żądanie zostało przekazane w postaci index.php?q=tresc/zadania. Lighttpd nie rozumie tak zaawansowanych reguł, dlatego z pomocą przychodzi moduł mod_magnet.