2011-01-10 14 views
2

Ich arbeite derzeit an einer Drupal-Website (6. *), die im Produktionsmodus durch eine Art von HTTP-Proxy zugegriffen wird, was bedeutet, dass ich alle Links neu schreiben muss für mein benutzerdefiniertes Design, wenn die Variable auf die Domäne festgelegt ist, auf die die Benutzer von der Site zugreifen werden.Override l() Funktion in Drupal

Die Seite hat viele interne Links, meist über Views. Mein Gedanke ist, dass der einfachste Weg, um dies zu lösen wäre, in die url() und/oder die l() Funktionen zu hacken und die URL vor der Rückgabe zu bearbeiten, wenn HTTP_X_FORWARDED_SERVER gesetzt ist.

Mein Problem ist, dass ich nicht herausfinden kann, wie man in diese Funktionen einhakt, oder wenn es sogar möglich ist, ohne den Kern zu berühren, hat jemand das tun müssen? Wie hast du es gelöst?

UPDATE: Ich habe vergessen zu erwähnen, dass der Proxy nicht auf der root - Ebene der Proxy - Domain liegt, also muss ich alle URLs (interne Links und Pfade vom System zu CSS - Dateien und Bildern etc)

Beispiele:

proxy.com/path -> site.com/lots/of/dirs

proxy.com/path/node/1 -> site.com/lots/of/dirs/node/1

proxy.com/path/sites/all/themes/mytheme/my.css -> site.com/lots/of/dirs/sites/all/themes/mytheme/my.css

Antwort

3

Ich bin mir nicht sicher, ob ich vollständig verstehe, was Sie brauchen, aber ich denke, Sie sollten sich die custom_url_rewrite_inbound() und custom_url_rewrite_outbound() Funktionen ansehen.

+0

Nach dem Blick auf mehr, ist dies wahrscheinlich der richtige Weg zu Mach es (noch nie zuvor von diesen Funktionen gehört), und es scheint den Trick zu machen, und ich werde mich für zukünftige Unternehmungen daran erinnern, danke :) Meine Hack-Lösung gab mir die Möglichkeit, für jede URL separate Einstellungsdateien zu haben Zugriff auf die Seite (einschließlich Proxies), die nützlicher ist als ich ursprünglich geplant hatte, also kann ich mich vorerst daran halten :) – Marco

+1

Ich denke, dass Sie verschiedene eingehende URLs innerhalb von custom_url_rewrite_inbound() unterscheiden können, wenn Sie einschalten die Variable $ _SERVER ['SERVER_NAME']. – marcvangend

+0

wahr dass :) obwohl ich auch eine Cookie-Domäne für den Proxy festlegen und eine andere Datenbankverbindung haben muss – Marco

1

Ich landete mit dem Kern etwas zu ändern, die folgenden Zeile in bootstrap.inc ersetzt

$server = explode('.', implode('.', array_reverse(explode(':', rtrim($_SERVER['HTTP_HOST'], '.')))));

mit

$host = $_SERVER['HTTP_X_FORWARDED_HOST'] ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST']; 
$server = explode('.', implode('.', array_reverse(explode(':', rtrim($host, '.'))))); 

Dann gründe ich gerade einen neuen Standortordner mit meinem proxy.com url und geändert $base_url und $cookie_domain in der settings.php

+1

Ändern des Kern-Codes ist keine gute Idee, da Sie Probleme haben werden, wenn Sie versuchen, Drupal-Version zu aktualisieren. –

+1

Ich bin mir dessen bewusst, aber die Lebensdauer dieser Seite beträgt etwa drei Monate, und ich hatte es eilig, es zu lösen, also musste dies geschehen. Ich bin immer noch offen für eine legitime Lösung für das Problem :) – Marco