Franky: RewriteRule kommt nicht an wo es hin soll

Hallo,

ich habe meine Seite auf einem raspberrypi laufen.

Die Seite selber kann ich mit http://raspberrypi/webseite aufrufen.

Jetzt erstelle ich gerade eine htaccess, doch irgendwo ist der Wurm drin

alle Seite etc liegen im Verzeichnis

http://raspberrypi/webseite

die URL soll

http://raspberrypi/webseite/artikel/erster_beitrag.html

heißen.

Dieser soll dann an folgende Seite geleitet werden

http://raspberrypi/webseite/index.php

Das versuche ich mit folgendem zu bewerkstelligen

RewriteEngine On
RewriteRule ^artikel/([a-z_-]+).html$ index.php?artikel=$1 [L] 

doch ich bekomme die Antwort

Not Found

The requested URL was not found on this server.

  1. Hallo Franky,

    ich bin nicht so der Oberindianer, aber diese Hinweise hätte ich.

    In welchem Ordner liegt die .htaccess Datei? Gleicher Ordner wie die index.html?

    Ist mod_rewrite generell aktiv? Ich weiß nicht, ob man das in der httpd.conf noch einrichten muss

    Das Apache-Handbuch schreibt:

    Per-directory Rewrites
    The rewrite engine may be used in .htaccess files and in <Directory> sections, with some additional complexity.
    To enable the rewrite engine in this context, you need to set "RewriteEngine On" and "Options FollowSymLinks" must be enabled. If your administrator has disabled override of FollowSymLinks for a user's directory, then you cannot use the rewrite engine.

    Fettschrift von mir. Ist FollowSymLinks aktiv?

    Rolf

    --
    sumpsi - posui - obstruxi
    1. also es ist aktiv, den

      RewriteRule ^(.*).html index.php?test=$1 [L]
      

      funktioniert

      1. Dann lass Dir in der index.php mal $_GET['test'] anzeigen.

        Rolfs Frage ...

        In welchem Ordner liegt die .htaccess Datei?

        ... beantwortet Deine Frage.

        1. Aber wie soll ich mir die $_GET['test'] anzeigen lassen, wenn die Seite nicht gefunden wird.

          Franky

          1. Eben hast Du noch behauptet, es gänge.

            Dann lass Dir doch mal in einer 404.php $_SERVER anzeigen…

      2. Wahrscheinlich ist es korrekt, aber nicht gewollt.

        RewriteEngine On
        RewriteRule ^artikel/([a-z_-]+).html$ index.php?artikel=$1 [L]
        

        die .htaccess liegt im Startverzeichnis

        http://raspberrypi/webseite

        und die RewriteRule will die index im Verzeichnis

        http://raspberrypi/webseite/artikel

        auffrufen.

        Sie soll aber eigentlich im Startverzeichnis

        http://raspberrypi/webseite

        die index aufrufen.

        Also wird die Datei in einem falschen Verzeichnis aufgerufen

        Frankie

        1. n'Abend,

          RewriteEngine On
          RewriteRule ^artikel/([a-z_-]+).html$ index.php?artikel=$1 [L]
          

          kann es sein, dass du eigentlich das Ziel der Umleitung vom Domain Root aus adressieren möchtest (also mit führendem /)? Denn andernfalls arbeitet mod_rewrite von dem Verzeichnis aus, das aus dem Request erkennbar ist.

          Einen schönen Tag noch
           Martin

          --
          Wie man sich bettet, so schallt es heraus.
          1. Hallo,

            kann es sein, dass du eigentlich das Ziel der Umleitung vom Domain Root aus adressieren möchtest (also mit führendem /)? Denn andernfalls arbeitet mod_rewrite von dem Verzeichnis aus, das aus dem Request erkennbar ist.

            Korrektur: Das Umleitungsziel ist entweder

            • ein relativer Pfad - relativ zum eigentlichen Request, das willst du nicht
            • ein absoluter URL-Pfad, beginnend mit http(s):, das willst du auch nicht
            • ein abdsluter Dateisystem-Pfad wie etwa wie etwa /wwwdata/target (müsstest du mit deiner individuellen Installation abgleichen); bei mir wäre es etwa /data/web.

            Einen schönen Tag noch
             Martin

            --
            Wie man sich bettet, so schallt es heraus.
            1. Das war jetzt zu hoch.

              Also

              http://raspberrypi/webseite/artikel/erster_beitrag.html

              das ist die Adresse. DAS Verzeichnis artikel gibt es nicht.

              Die htacsess liegt

              http://raspberrypi/webseite

              hier.

    2. Hallo miteinander,

      ich bin nicht so der Oberindianer

      ich auch nicht, aber für den Hausgebrauch reicht's meistens.

      In welchem Ordner liegt die .htaccess Datei? Gleicher Ordner wie die index.html?

      Das sollte sie.

      Ist mod_rewrite generell aktiv?

      Ja. Sonst würde die Direktive RewriteEngine On schon einen 500er schmeißen.

      Ich weiß nicht, ob man das in der httpd.conf noch einrichten muss

      Man muss es als Server-Admin zumindest erlauben. Das mod_rewrite-Modul wird meines Wissens in der Defaultkonfiguration schon mitgeladen - es sei denn der Hoster hätte das deaktiviert. Hat er aber nicht. Siehe oben.

      Per-directory Rewrites
      The rewrite engine may be used in .htaccess files and in <Directory> sections, with some additional complexity.
      To enable the rewrite engine in this context, you need to set "RewriteEngine On" and "Options FollowSymLinks" must be enabled. If your administrator has disabled override of FollowSymLinks for a user's directory, then you cannot use the rewrite engine.

      Ups. Den Zusammenhang mit FollowSymLinks kannte ich auch noch nicht.

      Einen schönen Tag noch
       Martin

      --
      Wie man sich bettet, so schallt es heraus.
      1. Hallo Martin,

        Der Hoster ist er selbst, es ist doch ein Himbeertörtchen…

        FollowSymLinks war mir auch neu und ich frage mich auch, warum es diese Anforderung gibt. Ich erkenne nicht wirklich einen Sinn darin, schließlich ist es ja nicht so (hoffe ich), dass der Apache aus jeder RewriteRule einen SymLink generiert. Das wär was, wenn Linux SymLinks aus Regexen aufbauen könnte.

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Hallo Rolf,

          Der Hoster ist er selbst, es ist doch ein Himbeertörtchen…

          aaah, stimmt. Das ist in meinem bewussten Hirn wohl nicht angekommen.

          FollowSymLinks war mir auch neu und ich frage mich auch, warum es diese Anforderung gibt. Ich erkenne nicht wirklich einen Sinn darin

          Ich auch nicht.

          schließlich ist es ja nicht so (hoffe ich), dass der Apache aus jeder RewriteRule einen SymLink generiert.

          Keineswegs. Die RewriteRules der Indianer haben keine Entsprechung im Filesystem.

          Das wär was, wenn Linux SymLinks aus Regexen aufbauen könnte.

          Kann es nicht. Ein SymLink auf einem Linux-Datenträger ist ähnlich wie eine Datei-Verknüpfung in Windows. Es gibt genau ein exakt beschriebenes Linkziel (und wenn das nicht mehr existiert - Pech gehabt).

          Es gibt aber einen entscheidenden Unterschied zwischen Symlinks unter Linux und Dateiverknüpfungen unter Windows: Symlinks in Linux werden direkt vom Filesystem-Treiber aufgelöst, ohne dass die Anwendung das merkt; Dateiverknüpfungen in Windows werden ausschließlich vom Explorer, also auf Anwendungsebene aufgelöst.
          Alternative Dateimanager sehen meist nur eine Datei LinkTarget.lnk, mit der sie nix anfangen können.

          Einen schönen Tag noch
           Martin

          --
          Wie man sich bettet, so schallt es heraus.
  2. Passend zum Thema kommt der heutige Eintrag zu unserem Adventskalender:

    Hier entlang, bitte!

    Vielen Dank an @Der Martin

    Herzliche Grüße

    Matthias Scharwies

    --
    Eigentlich hatte ich heute viel vor - jetzt habe ich morgen viel vor!