Samstag, 2. Juni 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>

Liked this post? Follow this blog to get more. 

Labels: Web

Kommentar erfassen