Samstag, Juni 02, 2007

Drupal 5.1 zickt unter Umständen bei Clean URLs

Auf einem bei Hostpoint gehosteten Web-Server eines Kunden laufen ...

  • Apache 1.3.37
  • PHP 5.1.6 (als CGI)
  • Drupal 5.1, 2007-01-29

Rufe ich die Test-Seite auf, die die korrekte Arbeitsweise von "Clean URLs" überprüft, gibt es Probleme beim Laden der Stylesheets.

Nach etwa einer geschlagenen Stunde debugging weiss ich nun endlich, wieso:

Die Funktion base_path() in /includes/common.inc, die unter anderem auch von drupal_get_css() aufgerufen wird, liefert in der obigen Server-Konfiguration (PHP als CGI, verdammt seist du!) einen falschen Pfad zurück:

Aktuelle URL: http://www.server.tld/node/8
PHP-Snippet: print($GLOBALS['base_path']);
Ausgabe: /node/

Deshalb werden die @imports auf die Stylesheets mit einem falschen Pfad versehen, was wiederum die in der .htaccess angegeben mod_rewrite-Regeln (die Zeilen sind übrigens ein Höchstmass an Effizienz, da werden meine Augen jedesmal feucht) zum Fehlglauben verleitet, die angefragten Stylesheets existierten nicht:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Stattdessen wird die Anfrage an das Script index.php weitergeleitet, das nun text/html ausliefert und die Browser ausser Tritt bringt. Seiten werden so pro eingebundenem Stylesheet um je 10KB schwerer für den Download.

Lösung

(Gemäss problem with clean url - duplicate path and other strange issues)

Man aktiviere in der Datei /sites/default/settings.php folgende Einstellung (ca. Zeile 115):

$base_url = 'http://www.server.tld'; //NO trailing slash!

Die nun mit SEF-URLs ausgelieferte Seite funktioniert tadellos und enthält die korrekten Verweise im Header:

<style type="text/css" media="all">@import "/modules/node/node.css";</style>
<style type="text/css" media="all">@import "/modules/system/admin.css";</style>
<style type="text/css" media="all">@import "/modules/system/defaults.css";</style>
<style type="text/css" media="all">@import "/modules/system/system.css";</style>
<style type="text/css" media="all">@import "/modules/user/user.css";</style>
<style type="text/css" media="all">@import "/themes/garland/style.css";</style>
<style type="text/css" media="all">@import "/themes/garland/ride.css";</style>
<style type="text/css" media="print">@import "/themes/garland/print.css";</style>

Labels:

1 Kommentare | neuen Kommentar verfassen

Kommentare

neuen Kommentar verfassen

Anonymous Anonym um 06.09.2007 09:21:00 Uhr

Vielen Dank für den Tipp! Seit dem Versionswechsel PHP4 zu PHP5 bei Hostpoint war meine Drupal4 Installation versaut. Zurück auf PHP4 war alles wieder ok. Ich vermutete zunächst eine Inkompatibiltät in einem Drupal Modul mit PHP5 und nahm die Gelegenheit wahr, auf Drupal5 zu migrieren (und die Site www.collector.ch neu zu frisieren). Leider mit demselben Ergebnis: Layout versaut. Durch Ihren Hinweis sind mir lange Debugging Stunden erspart geblieben.
So gesehen, kann ich Drupal v.a. in der neuesten Version nur empfehlen, bei hostpoint bin ich im Moment eher zurückhaltend.