Alex: / (PHP) absolute URI für header('Location: ...') und mod_rewrite

Hallo,

habe hier gerade zufällig gelesen, dass man (bei HTTP/1.1) für header('Location: ...') eine absolute URI angeben muss.

Nun habe ich eine Seite, bei der alle Anfragen per mod_rewrite von http://domain.tld/ nach http://domain.tld/cms/index.php weitergeleitet werden.

Jetzt ist mir aufgefallen, dass

  
$base_uri = 'http://'.$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['PHP_SELF']), '/\\').'/');  

auf manchen Servern "http://domain.tld/cms/", auf anderen aber "http://domain.tld/" ist. Wie bekomme ich immer eindeutig http://domain.tld/?

Danke,
Alex

  1. hi,

    Jetzt ist mir aufgefallen, dass

    $base_uri = 'http://'.$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['PHP_SELF']), '/\').'/');

    
    > auf manchen Servern "http://domain.tld/cms/", auf anderen aber "http://domain.tld/" ist.  
      
    Na ja, das hängt wohl logischerweise davon ab, wo das aktuelle Script liegt.  
      
    
    > Wie bekomme ich immer eindeutig http://domain.tld/?  
      
    Wenn du den Verzeichnisnamen gar nicht haben willst - wieso verzichtest du dann nicht auf ihn?  
      
    Aber vermutlich willst du ja doch die Verzeichnisse ab der Domain-Wurzel haben - dann nimm doch vielleicht $\_SERVER['REQUEST\_URI'] (oder Teile davon).  
      
    gruß,  
    wahsaga  
      
    
    -- 
    /voodoo.css:  
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    
    1. Hallo,

      Na ja, das hängt wohl logischerweise davon ab, wo das aktuelle Script liegt.

      Es werden alle Anfragen nach cms/index.php weitergeleitet. Das Skript ist also cms/index.php. Trotzdem ist $base_uri auf verschiedenen Servern unterschiedlich.

      Wenn du den Verzeichnisnamen gar nicht haben willst - wieso verzichtest du dann nicht auf ihn?

      Auf der untersten Ebene ist eben keine Datei, nur Verzeichnisse (cms, images, templates usw.).

      Aber vermutlich willst du ja doch die Verzeichnisse ab der Domain-Wurzel haben - dann nimm doch vielleicht $_SERVER['REQUEST_URI'] (oder Teile davon).

      Ja, das ist eben die URI. Ich hätte aber gerne das "Stammverzeichnis" möglichst ohne jedesmal die URI wegkürzen zu müssen.

      Alex

  2. Hallo,

    nochmal anders gefragt:

    ich habe unter http://domain.tld/ eine .htaccess-Datei mit folgendem Inhalt:

      
    RewriteEngine On  
    RewriteRule ^(.*)/?$ cms/index.php?x=$1  
    
    

    Die Datei http://domain.tld/cms/index.php sieht folgendermaßen aus:

      
    <?php  
    echo dirname($_SERVER['PHP_SELF']);  
    ?>  
    
    

    Was müsste nun ausgegeben werden, wenn ich http://domain.tld/bla aufrufe?

    Alex

    1. hi,

      RewriteRule ^(.*)/?$ cms/index.php?x=$1
      Die Datei http://domain.tld/cms/index.php sieht folgendermaßen aus:

      <?php
      echo dirname($_SERVER['PHP_SELF']);

      Was müsste nun ausgegeben werden, wenn ich http://domain.tld/bla aufrufe?

      M.E. müsste das /cms/index.php sein.
      http://www.php.net/manual/de/reserved.variables.php#reserved.variables.server

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hallo wahsaga,

        M.E. müsste das /cms/index.php sein.

        Ja, bzw. nur /cms wegen dirname(). Das bekomme ich auch auf meinem lokalen WAMP-Server. Auf einem Shared-Hosting-Server bekam ich aber die unterste Ebene zurückgeliefert, also das Verzeichnis in dem die .htaccess-Datei liegt. Das hat mich etwas verunsichert.

        BTW: was ist eigentlich, wenn ich einfach nur header('location: bla.html'); schreibe? Bisher hatte ich keine Probleme damit. Aber da es nicht korrekt ist, kann das irgendwie Probleme machen?

        Grüße
        Alex