Ich bin dabei, viele Websites von einer alten auf eine neue Serverkonfiguration zu migrieren. Jede Site basiert auf einer ähnlichen (aber leider nicht identischen) Codebasis unter Verwendung von mod_rewrite-URLs.
- Ubuntu 8.04 LTS => Ubuntu 12.04 LTS
- Apache 2.22.8 => Apache 2.2.22
- PHP 5.2 (FastCGI) => PHP 5.3 (PHP5-FPM)
Meistens funktioniert es wie ein Zauber, aber in der neuen Konfiguration ist $ _SERVER ['REDIRECT_URL'] nicht mehr festgelegt, und der Code schlägt aufgrund einer Abhängigkeit von dieser globalen Variablen fehl.
Soweit ich weiß, wird diese Variable von Apache festgelegt, wenn eine Umleitung erfolgt. Offensichtlich passiert das jetzt nicht, aber ich kämpfe darum, die Ursache zu finden.
- Ist es das Apache-Upgrade oder (meine Vermutung) der Wechsel von PHP FastCGI zu PHP5-FPM?
- Wie bekomme ich diese Variable zurück?
Ich würde wirklich lieber nicht den Code auf jeder Site bearbeiten müssen, also werde ich bei Bedarf ein globales PHP auto_prepend festlegen, aber im Idealfall möchte ich die Serverkonfiguration korrigieren und diese zuerst festlegen.
Potenziell verwandt: Ich habe jetzt auch ein paar neue $ _SERVER-Variablen, nämlich REDIRECT_SCRIPT_URL und REDIRECT_REDIRECT_SCRIPT_URL. Diese scheinen die richtigen Daten zu haben, die ich für die REDIRECT_URL haben möchte, scheinen aber auch darauf hinzudeuten, dass zwei interne Weiterleitungen aufgetreten sind, die vorher nicht aufgetreten sind. Die Google-Suche nach REDIRECT_REDIRECT_SCRIPT_URL gibt nur zufällige var_dump-Ausgaben zurück. Ist SCRIPT_URL die neue REDIRECT_URL?
Bearbeiten 1
Erneutes Überprüfen REDIRECT_URL ist (jetzt) festgelegt, jedoch immer auf 'index.php' (das mod_rewrite-Ziel) anstelle der erwarteten eingegebenen URL. Ich habe auf eine Verwendung von PHP auto_prepend_file zurückgegriffen, um die benötigte Variable manuell festzulegen.
Ich bin mir nicht sicher, wie ich es beim ersten Mal verpasst habe, aber ich habe in der Zwischenzeit einige Änderungen vorgenommen, also gibt es wahrscheinlich eine Chance von außen, dass es nicht da war. Entschuldigung, wenn dies jemanden irreführt.
Bearbeiten 2
Um die folgenden Erwähnungen von ErrorDocument zu behandeln, wird folgende mod_rewrite-Regel verwendet:
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
Die Variable $ _GET ['url'] ist festgelegt, daher muss die Regel funktionieren.
Um klar zu sein, habe ich zu diesem Zeitpunkt die ursprünglich erwähnte Problemumgehung für auto_prepend_file verwendet.