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.
-
url.rewrite-final = (
-
"/rss.xml$" => "/index.php?q=rss.xml",
-
"^/([^.?]*)\?(.*)$" => "/index.php?q=$1&$2",
-
"^/search/(.*)$" => "/index.php?q=search/$1",
-
"^/([^.?]*)$" => "/index.php?q=$1",
-
"^/([^.?]*\.html)$" => "/index.php?q=$1",
-
"^/([^.?]*\.htm)$" => "/index.php?q=$1"
-
)
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:
-
RewriteCond %{REQUEST_FILENAME} !-f
-
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.

