Gerhard: CSS-Datei einbinden

Hallo!

Ich möchte meine Stylesheet-Datei vom Server-Pfad weg einbinden:
<link rel="stylesheet" type="text/css" title="ghostwhite" href="<? echo $_SERVER["DOCUMENT_ROOT"]; ?>style/css/ghostwhite.css" />
Die Datei existiert tatsächlich und wenn ich den <link>-Befehl aus einer Datei in meinem eigenen Verzeichnis-Root aufrufe, dann funktioniert es auch.

Das Problem ist aber viel tiefgehender. Bis jetzt habe ich alle externen Ressourcen (zb include-Dateien, Bilder, css-dateien usw.) aus Sicht meines Verzeichnis-Roots aufrufen können, da ich alles in einer zentralen index.php verwaltet habe.
Da ich jetzt aber mit mod_rewrite die üblicherweise an index.php angehängten Parameter nicht mehr anzeige sondern je Parameter ein eigenes Unterverzeichnis, bekomme ich Probleme mit den Pfaden, da sich diese ja nun geändert haben.

Wie kann man dieses Problem lösen?

lg Gerhard

  1. Hi,

    Ich möchte meine Stylesheet-Datei vom Server-Pfad weg einbinden:
    <link rel="stylesheet" type="text/css" title="ghostwhite" href="<? echo $_SERVER["DOCUMENT_ROOT"]; ?>style/css/ghostwhite.css" />

    das ergibt welchen HTML-Code?

    Die Datei existiert tatsächlich

    Gut. Nur kennt HTTP keine Dateien, diese Aussage ist also bar jeder Relevanz. Existiert die _Ressource_?

    und wenn ich den <link>-Befehl

    Es gibt in HTML keine Befehle.

    Wie kann man dieses Problem lösen?

    Ad 1) HTML-Code betrachten. Serverseitiger Code kann bei clientseitigen Problemen niemals helfen, wohl aber ihre Lösung verhindern.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Ich möchte meine Stylesheet-Datei vom Server-Pfad weg einbinden:
      <link rel="stylesheet" type="text/css" title="ghostwhite" href="<? echo $_SERVER["DOCUMENT_ROOT"]; ?>style/css/ghostwhite.css" />

      das ergibt welchen HTML-Code?

      <link rel="stylesheet" type="text/css" title="ghostwhite" href="/www/htdocs/w0057e56/style/css/ghostwhite.css" />

      Wenn ich mir in PHP mit opendir und readdir alle Dateien aus dem Verzeichnis "/www/htdocs/w0057e56/" ausgeben lasse, dann erscheint auch dieser nächste ordner namens "style", und in diesem ist die datei "css/ghostwhite.css" ohne zweifel vorhanden.

      fragezeichen fragezeichen fragezeichen

      lg Gerhard

      1. Hi,

        <link rel="stylesheet" type="text/css" title="ghostwhite" href="/www/htdocs/w0057e56/style/css/ghostwhite.css" />

        und gibt es http://deinserver/www/htdocs/w0057e56/style/css/ghostwhite.css?

        Wenn ich mir in PHP mit opendir und readdir alle Dateien aus dem Verzeichnis "/www/htdocs/w0057e56/" ausgeben lasse, dann erscheint auch dieser nächste ordner namens "style", und in diesem ist die datei "css/ghostwhite.css" ohne zweifel vorhanden.

        Noch einmal: HTTP kennt nur Ressourcen, keine Dateien. Es ist zu exakt 100% irrelevant, welche Verzeichnisse und Dateien im für PHP sichtbaren Filesystem liegen. Wichtig sind nur URIs, die auf Dateien gemappt werden _können_, aber keinesfalls _müssen_. Überprüfe also, wie die URI lautet - falls es sie gibt - die serverseitig auf Deine Datei verweist.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. und gibt es http://deinserver/www/htdocs/w0057e56/style/css/ghostwhite.css?

          Ich könnte es ausprobieren wenn ich wüsste was ich für "deinserver" einsetzen soll.

          Meine eigentliche Adresse zielt ja auch hierhin:
          http://deinserver/www/htdocs/w0057e56/style/css/ghostwhite.css
                                       ^

          lg Gerhard

          1. Hi,

            und gibt es http://deinserver/www/htdocs/w0057e56/style/css/ghostwhite.css?
            Ich könnte es ausprobieren wenn ich wüsste was ich für "deinserver" einsetzen soll.

            den Hostnamen Deines Servers.

            Meine eigentliche Adresse zielt ja auch hierhin:
            http://deinserver/www/htdocs/w0057e56/style/css/ghostwhite.css
                                         ^

            Ich habe nicht verstanden, was Du mir hiermit sagen willst. Ist Dir mittlerweile der Unterschied zwischen Dateiname und URL klar?

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. Ich habe nicht verstanden, was Du mir hiermit sagen willst. Ist Dir mittlerweile der Unterschied zwischen Dateiname und URL klar?

              OK das war mein Fehler, jetzt hab ich es kapiert.
              Aber es gibt doch sicher jemanden hier der schon mal mit mod_rewrite auf eine derartige Problematik gestoßen ist. Ist es sinnvoll, dann alle Ressourcen absolut einzubinden (zb: <img src="http://meinedomain.at/unterordner/image.jpg">), bzw. bewirkt das nicht eine Verlangsamung des Seitenaufbaus?
              Oder gibt es noch anderer Lösungsmöglichkeiten?
              lg Gerhard

              1. So jetzt habe ich das Problem wirklich nur mehr auf die CSS-Datei reduziert:

                Ich habe mir jetzt eine Funktion geschrieben:

                  
                  function correctPath()  
                  {  
                    $vReturn="";  
                    for($vI=0;$vI<count($_GET);$vI++)  
                      $vReturn.="../";  
                    return $vReturn;  
                  }  
                
                

                Diese Funktion rufe ich in jedem <img src..> auf.
                z.B.: <img src="<? echo correctPath(); ?>unterordner/image.jpg">

                Meine .htaccess:
                RewriteEngine on
                RewriteRule user/gerhard index.php?link=userpage&user=gerhard

                Da 2 Get-Parameter existieren, hängt er also 2 mal "../" davor an:
                <img src="../../unterordner/image.jpg">

                Das funktioniert mit allen Bildern einwandfrei.
                Nur mit der CSS-Datei nicht.
                Egal ob mit <link> oder @import, es funktioniert nicht obwohl der Pfad beim manuellen Test eindeutig existiert.

                Warum???
                lg Gerhard

              2. Hallo Gerhard.

                Ist es sinnvoll, dann alle Ressourcen absolut einzubinden (zb: <img src="http://meinedomain.at/unterordner/image.jpg">), bzw. bewirkt das nicht eine Verlangsamung des Seitenaufbaus?

                Wenn, dann eine Beschleunigung, da der User Agent nicht erst selbst den absoluten URL ermitteln muss.

                Oder gibt es noch anderer Lösungsmöglichkeiten?

                <img src="/unterordner/image.jpg" alt="image">
                                          ^absolut zum Wurzelverzeichnis der Webpräsenz

                Einen schönen Dienstag noch.

                Gruß, Ashura

                --
                Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
                30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
                Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
                [Deshalb frei! - Argumente pro freie Software]
                1. Hallo.

                  <img src="/unterordner/image.jpg" alt="image">
                            ^absolut zum Wurzelverzeichnis der Webpräsenz

                  Jetzt mit Vorschau...

                  Einen schönen Dienstag noch.

                  Gruß, Ashura

                  --
                  Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
                  30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
                  Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
                  [Deshalb frei! - Argumente pro freie Software]
                  1. Weder die Variante von Tom (https://forum.selfhtml.org/?t=113883&m=724044) noch deine Variante funktioniert nach dem mod_rewrite. Ohne mod_rewrite funktioniert alles prima.
                    Vielleicht irgendein Fehler im HTML-Code?

                      
                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  
                         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
                    <html xmlns="http://www.w3.org/1999/xhtml">  
                    <head>  
                      <meta name="author" content="Landjugend Dechantskirchen" />  
                      <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />  
                      <meta name="description" content="Landjugend Dechantskirchen" />  
                      <meta name="language" content="de" />  
                      <meta name="organization" content="Landjugend Dechantskirchen" />  
                      <meta name="pragma" content="no-cache" />  
                      <meta http-equiv="cache-control" content="no-cache" />  
                      
                      <title>LJ Dechantskirchen</title>  
                      
                      <link rel="stylesheet" type="text/css" title="ghostwhite" href="/style/css/ghostwhite.css" />  
                      
                    </head>  
                    
                    
                    1. Hallo Gerhard.

                      Weder die Variante von Tom (https://forum.selfhtml.org/?t=113883&m=724044) noch deine Variante funktioniert nach dem mod_rewrite. Ohne mod_rewrite funktioniert alles prima.

                      Mir drängt sich der Verdacht auf, dass deine RewriteRule zu gierig ist.

                      Wie lautet sie?

                      Einen schönen Dienstag noch.

                      Gruß, Ashura

                      --
                      Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
                      30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
                      Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
                      [Deshalb frei! - Argumente pro freie Software]
                      1. Mir drängt sich der Verdacht auf, dass deine RewriteRule zu gierig ist.

                        Wie lautet sie?

                        RewriteEngine on
                        RewriteRule user/gerhard index.php?link=userpage&user=gerhard

                        Bis jetzt also nur mal testweise ohne regexp
                        lg Gerhard

                        1. Hallo Gerhard.

                          RewriteEngine on
                          RewriteRule user/gerhard index.php?link=userpage&user=gerhard

                          Und warum verlinkst du nun nicht intern ebenfalls immer mit dem Präfix „user/gerhard“?

                          Bei deinem Beispiel also:

                          <img src="/user/gerhard/unterordner/image.jpg" alt="image">

                          Einen schönen Dienstag noch.

                          Gruß, Ashura

                          --
                          Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
                          30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
                          Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
                          [Deshalb frei! - Argumente pro freie Software]
                          1. <img src="/user/gerhard/unterordner/image.jpg" alt="image">

                            Wie ich jetzt bereits zum wiederholten Mal sagen muss: Es gibt kein Problem mit dem <img>-Tag, da funktioniert alles einwandfrei. Aber die Stylesheet-Datei lässt sich nicht einbinden!

                2. Hi,

                  Ist es sinnvoll, dann alle Ressourcen absolut einzubinden (zb: <img src="http://meinedomain.at/unterordner/image.jpg">), bzw. bewirkt das nicht eine Verlangsamung des Seitenaufbaus?
                  Wenn, dann eine Beschleunigung, da der User Agent nicht erst selbst den absoluten URL ermitteln muss.

                  diese Beschleunigung dürfte im Rahmen der Verlangsamung liegen, die durch die Übertragung der zusätzlichen Bytes entsteht - also nicht messbar sein.

                  Cheatah

                  --
                  X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                  X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                  X-Will-Answer-Email: No
                  X-Please-Search-Archive-First: Absolutely Yes
          2. Meine eigentliche Adresse zielt ja auch hierhin:
            http://deinserver/www/htdocs/w0057e56/style/css/ghostwhite.css
                                         ^

            Dann sollte die Adresse vermutlich

            http://deinserver/w0057e56/style/css/ghostwhite.css

            heißen. Wenn du das mit $_SERVER[DOCUMENT_ROOT] löst, musst du das Ergebnis so beschneiden, dass es dir nur den ordnernamen ausgibt und dann den rest außenrum bauen :)

      2. Hallo Gerhard,

        das ergibt welchen HTML-Code?
        <link rel="stylesheet" type="text/css" title="ghostwhite" href="/www/htdocs/w0057e56/style/css/ghostwhite.css" />

        Und du meinst, dass mit dieser URL deine CSS-Ressource erreichbar ist? Sei dir bitte darüber im Klaren, dass diese Datei/Ressource vom Browser per HTTP abgerufen wird. Die URL "/www/htdocs/w0057e56/style/css/ghostwhite.css" ist da mit großer Wahrscheinlichkeit _nicht_ die passende Angabe.

        Wenn ich mir in PHP mit opendir und readdir alle Dateien aus dem Verzeichnis "/www/htdocs/w0057e56/" ausgeben lasse, dann erscheint auch dieser nächste ordner namens "style", und in diesem ist die datei "css/ghostwhite.css" ohne zweifel vorhanden.

        Mag sein, aber PHP sieht auch das Dateisystem auf dem Server. Der Browser nicht.

        fragezeichen fragezeichen fragezeichen

        Punkt.

        So long,

        Martin

  2. Lass dir mal den Pfad ausgeben, dann kannst du ja den Pfad mit deinem vergleichen.

    Aber welchen Sinn macht das Einbinden der css auf diese Art und Weise?

    1. Aber welchen Sinn macht das Einbinden der css auf diese Art und Weise?

      Wie bereits gesagt: Kennst du eine bessere Möglichkeit mein Problem mit den neuen Pfaden aus mod_rewrite zu lösen?

      lg Gerhard

  3. Hello,

    Ich möchte meine Stylesheet-Datei vom Server-Pfad weg einbinden:

    Aber doch auf dem Client und nicht auf dem Server, oder?

    <link rel="stylesheet" type="text/css" title="ghostwhite" href="<? echo $_SERVER["DOCUMENT_ROOT"]; ?>style/css/ghostwhite.css" />

    <link rel="stylesheet" type="text/css" title="ghostwhite" href="http://<? echo $_SERVER['HTTP_HOST']; ?>/style/css/ghostwhite.css" />

    Harzliche Grüße vom Berg
    esst mehr http://www.harte-harzer.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. <link rel="stylesheet" type="text/css" title="ghostwhite" href="http://<? echo $_SERVER['HTTP_HOST']; ?>/style/css/ghostwhite.css" />

      So wird die Datei nicht inkludiert.
      Wenn ich die Ausgabe nehme, und manuelle im Browserfenster eingebe, bietet er mir die Datei zum Download an. Aber die Stylesheets werden trotzdem nicht verwendet. Sowas gibts doch nicht...

      1. Hello,

        <link rel="stylesheet" type="text/css" title="ghostwhite" href="http://<? echo $_SERVER['HTTP_HOST']; ?>/style/css/ghostwhite.css" />
        So wird die Datei nicht inkludiert.
        Wenn ich die Ausgabe nehme, und manuelle im Browserfenster eingebe, bietet er mir die Datei zum Download an. Aber die Stylesheets werden trotzdem nicht verwendet. Sowas gibts doch nicht...

        liegt es ggf. am Shirt-Open-Tag?

        Hast Du Dir mal angeschaut, was

        echo "http://{$_SERVER['HTTP_HOST']}/style/css/ghostwhite.css"

        ergibt? Liegt Deine Ressource an der bezeichneten Stelle?

        Harzliche Grüße vom Berg
        esst mehr http://www.harte-harzer.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Wenn ich die Ausgabe nehme, und manuelle im Browserfenster eingebe, bietet er mir die Datei zum Download an. Aber die Stylesheets werden trotzdem nicht verwendet. Sowas gibts doch nicht...
          Hast Du Dir mal angeschaut, was

          echo "http://{$_SERVER['HTTP_HOST']}/style/css/ghostwhite.css"

          ergibt? Liegt Deine Ressource an der bezeichneten Stelle?

          WAS HABE ICH DENN MIT DEM VORHERIGEN SATZ AUSGESAGT!!!!!!!!!!!!

          1. Hallo Freunde des gehobenen Forumsgenusses,

            Liegt Deine Ressource an der bezeichneten Stelle?
            WAS HABE ICH DENN MIT DEM VORHERIGEN SATZ AUSGESAGT!!!!!!!!!!!!

            [rot13]
            WüRdEsT dU bItTe AuFhÖhReN zU sChReIeN, dAs NeRvT!
            wEnN dEr BrOwSeR dIe CsS-dAtEi VeRgIsSt HaSt Du EiNeN fEhHlEr GeMaChT,
            pOsTe BiTtE eInEn LiNk
            [/rot13]

            Gruß
            Alexander Brock

            --
            SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:? ss:| de:> js:( ch:| sh:( mo:} zu:}
            http://againsttcpa.com
        2. Hi,

          liegt es ggf. am Shirt-Open-Tag?

          Hat der was mit dem button-Element zu tun?
          ;-)

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      2. Hi,

        <link rel="stylesheet" type="text/css" title="ghostwhite" href="http://<? echo $_SERVER['HTTP_HOST']; ?>/style/css/ghostwhite.css" />
        So wird die Datei nicht inkludiert.
        Wenn ich die Ausgabe nehme, und manuelle im Browserfenster eingebe, bietet er mir die Datei zum Download an. Aber die Stylesheets werden trotzdem nicht verwendet. Sowas gibts doch nicht...

        Welcher content-type wird für das css übermittelt?

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Welcher content-type wird für das css übermittelt?

          Was heißt "einen content-typ für css übermitteln"?

          1. Hallo Freunde des gehobenen Forumsgenusses,

            Was heißt "einen content-typ für css übermitteln"?

            Du versuchst, Inhalte über HTTP anzubieten und kennst die RFC nicht?
            Lies RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1 Kapitel 14 $17 *SCNR*

            Gruß
            Alexander Brock

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
        2. Hello,

          Welcher content-type wird für das css übermittelt?

          Dass der nicht passt, hatte ich auch schon vermutet. Aber welcher Server sollte so blöde eingestellt werden, dass er bei *.css nicht den passenden Content-Type mitsendet?

          Und außerdem ist der Client doch auch gebrieft...

          Harzliche Grüße vom Berg
          esst mehr http://www.harte-harzer.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau