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.
quelle
Antworten:
REDIRECT_URL wird nur vom Apache-Webserver und nur unter bestimmten Umständen festgelegt . Es ist wahrscheinlich nicht etwas, worauf sich Ihr Code verlassen sollte. Soweit ich das beurteilen kann, wäre die beste Lösung, den fehlerhaften PHP-Code zu reparieren. Sie können nicht wirklich erzwingen, dass dies immer in Apache eingestellt wird.
quelle
Laut PHP-Dokumentation:
Es scheint also, dass nicht alle
$_SERVER
superglobalen Variablen so plattformunabhängig sind, wie man es erwarten würde.$_SERVER['REQUEST_URI']
scheint ein solcher Wert zu sein, der von allen wichtigen Webservern konsistent definiert wird. Vielleicht möchten Sie ihn stattdessen verwenden.quelle
Für fehlende Bilder in einem unserer Projekte, die zur index.php umgeleitet wurden, habe ich gerade diesen Fix verwendet:
URL: http://www.domanXY.de/image.php?file=var/binaries/store/8dfaadde-5309-4a35-8f9a-d8b9cd807aae.jpg&options=&options=resize_outer(320,150);sharpen(64) ;
Wenn Sie eine globale Lösung wünschen, müssen Sie explode () usw. verwenden und eine andere vorgegebene Variable wie $ _SERVER ['REQUEST_URI'] verwenden.
quelle
Sie können eine PHP-Auto-Prepend-Datei so einstellen, dass sie einen kleinen Ausschnitt aus PHP-Code enthält, der diese Variable festlegt.
quelle