Variable SCRIPT_URI fehlt nach Umzug zu netcup

  • Hallo,

    hat jemand eine Idee, was man tun muss, um in PHP-Scripten bei netcup die Variable $_SERVER['SCRIPT_URI'] wieder gesetzt zu bekommen?

    Meines Wissens wird diese Variable von Apache mod_rewrite gesetzt, wenn die RewriteEngine aktiviert ist (Zeile RewriteEngine On in .htaccess).

    Dies hab ich in meiner .htaccess.


    Ich verwende PHP 7.2.16 als "FPM-Anwendung von Apache bedient" auf einem Webhosting 8000 Paket;

    nginx-Apache-Proxymodus: an;

    Intelligente Bearbeitung statischer Dateien: an;

    Statische Dateien direkt durch nginx bedienen: aus


    Mach ich da was falsch, oder gibt es da eine grundsätzliche Einschränkung bei netcup?


    Danke.

  • Ich vermute, dass diese Variable (und SCRIPT_URL) mit der Apache Version 2.4 entfernt wurden. In der Dokumentation tauchen sie nämlich nicht mehr auf. Zum Vergleich: v2.2.x und v2.4.x


    Wofür genau brauchst Du diese Variable? Normalerweise kann man mit den anderen Werten aus $_SERVER besser arbeiten.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Ich brauche die Variable, da ich eine Software entwickelt habe, die in verschiedenen Umgebungen laufen können soll (bei einem anderen Webhoster, und auf einem Ubuntu-Server (Version 18.04), auf dem ein Apache/2.4.29 mit PHP-FPM läuft - dort mit SCRIPT_URI...)


    In der Vergangenheit hatte ich schonmal die Software umbauen müssen, da die entsprechenden Variablen nicht überall vorhanden waren - und damals was SCRIPT_URI überall vorhanden!

    SCRIPT_URI ist außerdem die einzige Server-Variable, die einem gleich eine fertige URL samt Protokoll liefert - mit anderen Variablen muss man sich das selbst zusammenbauen, also z.B. grob so:

    Code
    $script_uri = (isset($_SERVER['HTTPS'] ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];


    Von daher: Wenn irgendjemand eine Lösung hat, wie man SCRIPT_URI aktiviert, wäre das schön - ansonsten muss ich mal schauen, ob ich es umbaue (oder vielleicht kann man die Variable ja auch per .htaccess-Eintrag setzen?)


    Ansonsten: Falls es sonst wer braucht, der diesen Thread findet - hier die Unterschiede der Variablen am Beispiel eines Direktaufrufs von http://example.tld/dir/test.php/xxx?a=b (was passiert, wenn noch RewriteRules ins Spiel kommen, hab ich hier jetzt nicht berücksichtigt)

    SCRIPT_URI http://example.tld/dir/test.php/xxx
    SCRIPT_URL /dir/test.php/xxx
    SCRIPT_FILENAME /var/www/vhosts/hosting123456.abcde.netcup.net/installationsverzeichnis/dir/test.php
    REQUEST_URI /dir/test.php/xxx?a=b
    SCRIPT_NAME /dir/test.php
    PATH_INFO /xxx
    PHP_SELF /dir/test.php/xxx
    HTTP_HOST example.tld
  • Von daher: Wenn irgendjemand eine Lösung hat, wie man SCRIPT_URI aktiviert, wäre das schön

    Nö, gibt es nicht. Nimm das am besten gleich als Anlass Dir für den Zugriff auf global vars eine (statische) Klasse zu bauen, die die ganze Arbeit zentral erledigt. Wenns irgendwann mal wieder passiert ist der Aufwand dann viel geringer.

  • Ok - Danke für alle Antworten - falls es ein zukünftiger Leser benötigt - hier meine .htaccess-Lösung:

    Apache Configuration
    RewriteRule .* - [E=SCRIPT_URI:http://%{HTTP:Host}/$0]
    RewriteCond %{HTTPS} on
    RewriteRule .* - [E=SCRIPT_URI:https://%{HTTP:Host}/$0]
    RewriteCond %{ENV:REDIRECT_SCRIPT_URI} .
    RewriteRule .* - [E=SCRIPT_URI:%{ENV:REDIRECT_SCRIPT_URI}]

    (unter der Annahme, dass RewriteBase auf / sitzt - ansonsten muss die RewriteBase vor $0 jeweils eingefügt werden)

    (Zeilen 4+5 sind nötig, damin die Variable auf den Wert vom 1. Durchlauf der RewriteRules gesetzt wird)