Michael Jendryschik: SSI-Problem

Hallo zusammen,

basierend auf http://forum.de.selfhtml.org/archiv/2002/9/t23427/ versuche ich, eine Navigation so zu bauen, dass kein Dokument auf sich selbst verweist:

<ul>
    <!--#if expr="${REQUEST_URI} = ///" -->
    <li><strong title="Hier befinden Sie sich gerade.">Startseite</strong></li>
    <!--#else -->
    <li><a href="/">Startseite</a></li>
    <!--#endif -->
    <!--#if expr="${REQUEST_URI} = /foo/" -->
    <li><strong title="Hier befinden Sie sich gerade.">Foo</strong></li>
    <!--#else -->
    <li><a href="foo">Foo</a></li>
    <!--#endif -->
    <!--#if expr="${REQUEST_URI} = /bar/" -->
    <li><strong title="Hier befinden Sie sich gerade.">Bar</strong></li>
    <!--#else -->
    <li><a href="bar">Bar</a></li>
    <!--#endif -->
  </ul>

Nun bin ich auf Probleme gestoßen. Ich gebe zum Vergleich auf jeder Seite den Inhalt von var="REQUEST_URI" aus:

<p>Ausgabe: <!--#echo var="REQUEST_URI" --></p>

Befinde ich mich auf foo, wird

/foo

ausgegeben. Müsste ich dann nicht auch nach

<!--#if expr="${REQUEST_URI} = //foo/" -->
                                    ^^^^
abfragen? Funktionieren tut dies, obwohl ich damit gerechnet hätte, das / vor foo dann irgendwie escapen zu müssen.

Befinde ich mich im Rootverzeichnis, erhalte ich als Ergebnis der Abfrage

/

. Daher bin ich wie o.a. vorgegangen und vergleiche expr="${REQUEST_URI} mit ///. Dies funktioniert jedoch nicht. Alle möglichen anderen Varianten (z.B. mein dilettantischer Versuch ins Blaue hinein, mit /// zu vergleichen) führten ebenfalls nicht zum Erfolg. Wie funktioniert's richtig?

Ich hoffe, ich habe mein Problem ausreichend verständnis dargestellt.

Gruß,

MI

  1. Hallo,

    basierend auf http://forum.de.selfhtml.org/archiv/2002/9/t23427/ versuche ich, eine Navigation so zu bauen, dass kein Dokument auf sich selbst verweist:

    <ul>
        <!--#if expr="${REQUEST_URI} = ///" -->
        <li><strong title="Hier befinden Sie sich gerade.">Startseite</strong></li>
        <!--#else -->
        <li><a href="/">Startseite</a></li>

    Warum vergleichst du nicht z.B.?
    <!--#if expr="${REQUEST_URI} = /${DOCUMENT_URI}/" -->

    <!--#if expr="${REQUEST_URI} = //foo/" -->

    ^^^^

    abfragen? Funktionieren tut dies, obwohl ich damit gerechnet hätte, das / vor foo dann irgendwie escapen zu müssen.

    Durch /xxx/  wird irgendein Vorkommen von xxx an irgendeiner Stelle gesucht.
    Wenn du also im foo bist und /foo ausgegeben wird trifft sowohl /foo" als auch //foo/ zu.

    Grüße
    Thomas

    1. Hallo,

      basierend auf http://forum.de.selfhtml.org/archiv/2002/9/t23427/ versuche ich, eine Navigation so zu bauen, dass kein Dokument auf sich selbst verweist:

      <ul>
          <!--#if expr="${REQUEST_URI} = ///" -->
          <li><strong title="Hier befinden Sie sich gerade.">Startseite</strong></li>
          <!--#else -->
          <li><a href="/">Startseite</a></li>

      Warum vergleichst du nicht z.B.?
      <!--#if expr="${REQUEST_URI} = /${DOCUMENT_URI}/" -->

      Hm ... wie käme ich damit weiter?

      Aber du hast mich auf eine Idee gebracht. Folgendes funktioniert:

      <ul>
        <!--#if expr="${DOCUMENT_URI} = //index.shtml/" -->
        <li><strong title="Hier befinden Sie sich gerade.">Startseite</strong></li>
        <!--#else -->
        <li><a href="/">Startseite</a></li>
        <!--#endif -->
        <!--#if expr="${DOCUMENT_URI} = //foo/" -->
        <li><strong title="Hier befinden Sie sich gerade.">Foo</strong></li>
        <!--#else -->
        <li><a href="foo">Foo</a></li>
        <!--#endif -->
        <!--#if expr="${DOCUMENT_URI} = //bar/" -->
        <li><strong title="Hier befinden Sie sich gerade.">Bar</strong></li>
        <!--#else -->
        <li><a href="bar">Bar</a></li>
        <!--#endif -->
      </ul>

      Durch /xxx/  wird irgendein Vorkommen von xxx an irgendeiner Stelle gesucht.
      Wenn du also im foo bist und /foo ausgegeben wird trifft sowohl /foo" als auch //foo/ zu.

      Nach dem ersten / startet der Ausdruck und vor dem zweiten / endet er. Wen der Ausdruck selbst wiederum ein / enthält, hätte ich eigentlich mit Schwierigkeiten gerechnet.

      Gruß,

      MI

      1. Hallo,

        basierend auf http://forum.de.selfhtml.org/archiv/2002/9/t23427/ versuche ich, eine Navigation so zu bauen, dass kein Dokument auf sich selbst verweist:

        Warum vergleichst du nicht z.B.?
        <!--#if expr="${REQUEST_URI} = /${DOCUMENT_URI}/" -->

        Hm ... wie käme ich damit weiter?

        Ich dachte, du wollst auschlißen, dass ein Dokument auf sich selber werweist.
        Das wäre eine Möglichkeit, wenn:

        Aber du hast mich auf eine Idee gebracht. Folgendes funktioniert:

        <ul>
          <!--#if expr="${DOCUMENT_URI} = //index.shtml/" -->
          <li><strong title="Hier befinden Sie sich gerade.">Startseite</strong></li>
          <!--#else -->

        du keinen eigenen Texte pro Dukument ausgeben ausgeben würdest. (Ich, wenn's auch anderes geht gegen hardkodierte Werte ;-) Deshalb hätte ich auch eher die andere Variante gewählt.)

        <!--#if expr="${DOCUMENT_URI} = //foo/" -->
          <li><strong title="Hier befinden Sie sich gerade.">Foo</strong></li>
          <!--#else -->
          <li><a href="foo">Foo</a></li>
          <!--#endif -->
          <!--#if expr="${DOCUMENT_URI} = //bar/" -->

        Du kannst das auch so abkürzen:
          <!--#if expr="" -->
          <!--#elif expr="" -->
          <!--#elif expr="" -->
          <!--#else -->
          <!--#endif -->

        Das mit dem Escaping gige so:
        <!--#if expr=""$DOCUMENT_URI" = "/foo/file.html"" -->
            in foo
        <!--#elif expr=""$DOCUMENT_URI" = "/bar/file.html"" -->
           in bar
        <!--#else -->
            wo anders
        <!--#endif -->

        "in foo" wird ausgegeben wenn die DOCUMENT_URI "/foo/file.html" ist und "in bar" wenn die DOCUMENT_URI "/bar/file.html" ist.

        Grüße
        Thomas