Severin Kacianka: URLs umschreiben

Hallo liebes Forum,

ich hoffe ich erwische jetzt keine FAQ, aber mir stellt sich folgendes Problem:
Ich würde gerne unter http://www.example.org/johndoe den "Inhalt" der Ausführung eines  (PHP-) Skriptes mit dem GET-Parameter c=johndoe anzeigen.
Also einfach hübsche URLs für die Benutzerseiten.

Nach einiger Rechere, habe ich gelernt, dass mod_rewrite dafür das geeignete Mittel der Wahl ist. Leider tu ich mir mir dem Einsatz etwas schwer:
RewriteEngine on
RewriteCond [^.]
RewriteRule ^/(*) http://localhost/ius/foo.php?c=$1 [R=301,L]

Für mich ist das "Apachisch" für:
Wenn in der URL kein Punkt ist,
schicke alles nach dem ersten Slash an das Skript foo.php (als GET-Parameter c). Verwende Redirectcode 301 und brich ab.

Wo liegt mein Übersetzungsfehler?

Gruß,
Severin
PS: Für Gesamtübersetzungen bin ich dankbar, würde mich aber auch über ein Wörterbuch und eine Erklärung der Grammatik freuen ;-)

--
They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
-- Benjamin Franklin
  1. Hallo,

    Ich habe noch ein wenig herumgegoogelt, und folgendes gefunden: http://corz.org/serv/tricks/htaccess2.php. Daraus habe ich folgendes abgeleitet:

    RewriteEngine on
    RewriteCond [^.]
    RewriteRule ^(*) http://localhost/ius/foo.php?c=$1

    Leider funktioniert das auch nicht :/ Nur um den Verdacht zu beseitigen, dass meine .htaccess gar nicht ausgewertet wird, gibt es eine Möglichkeit dies zu testen? Eine Art "Hello World"  sozusagen.

    Gruß,
    Severin

    --
    They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
    -- Benjamin Franklin
    1. Hallo Forum,

      Nur um den Verdacht zu beseitigen, dass meine .htaccess gar nicht ausgewertet wird, gibt es eine Möglichkeit dies zu testen? Eine Art "Hello World"  sozusagen.

      Schreib irgendeinen Müll in die .htaccess, wenn sie ausgewertet wird gibt es einen 500er

      Gruß
      Alexander Brock

      1. Hallo.

        Schreib irgendeinen Müll in die .htaccess, wenn sie ausgewertet wird gibt es einen 500er

        Sehr spendabel.
        MfG, at

  2. hi,

    RewriteCond [^.]

    Für mich ist das "Apachisch" für:
    Wenn in der URL kein Punkt ist,

    Nein, das ist allerhöchstens "wenn kein Punkt ist".

    _Worin_ kein Punkt sein soll, hast du aber gar nicht angegeben.

    RewriteCond möchte einen Teststring und ein CondPattern als "Parameter" haben.

    Also beispielsweise
    RewriteCond %{REQUEST_URI} [^.]

    Die Maskierung des Punktes kann hier aber m.E. entfallen, da er innerhalb einer Zeichenklasse auftaucht sollte er bereits seiner Sonderbedeutung beraubt sein.

    Außerdem müsstest du aber noch angeben, dass der zu durchsuchende String _ausschließlich_ Zeichen aus der Zeichenklasse enthalten darf - derzeit würde es nämlcih genügen, wenn _irgendwo_ darin ein Zeichen daraus gefunden würde.
    Also noch mit den Sonderzeichen ^ und $ Bezug auf Anfang und Ende der Zeichenkette nehmen,
    [1]$

    gruß,
    wahsaga

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

    1. ^. ↩︎

    1. Hi,

      Also noch mit den Sonderzeichen ^ und $ Bezug auf Anfang und Ende der Zeichenkette nehmen,
      [1]$

      Und noch ein paar mehr als nur ein Zeichen zulassen:

      [2]+$

      cu,
      Andreas

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

      1. ^. ↩︎

      2. ^. ↩︎

    2. Hallo,

      Danke für eure Hilfe. Zum einen war  auf meinem Testsystem die .htaccess Unterstützung nicht eingeschaltet, zum anderen waren meine .htaccess auch falsch. Ich bin jetzt zu Folgendem gekommen, das aber leider immer noch nicht funktioniert:

      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME} [1]+$
      RewriteRule   ^/(.*)$  %{HTTP_HOST}/ius/foo.php?c=$1  [R]

      Ich bekomme bei der Eingabe von http://localhost/ius/ghghgh immer noch einen 404er, anstelle der Ausgabe des Skripts foo.php.

      Gruß,
      Severin

      --
      They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
      -- Benjamin Franklin

      1. ^. ↩︎

      1. hi,

        RewriteCond %{REQUEST_FILENAME} [1]+$
        RewriteRule   ^/(.*)$  %{HTTP_HOST}/ius/foo.php?c=$1  [R]

        Ich bekomme bei der Eingabe von http://localhost/ius/ghghgh immer noch einen 404er, anstelle der Ausgabe des Skripts foo.php.

        Warum gibst du eigentlich den %{HTTP_HOST} an und verwendest das Flag [R] - möchtest du explizit einen Redirect erzwingen, so dass die umgeschriebene Adresse neu vom browser angefordert und damit auch in der Adresszeile sichtbar wird?

        REQUEST_FILENAME für die Bedingung zu nehmen, erscheint mir ungünstig - das wäre laut Doku "the full local filesystem path to the file or script matching the request". Wenn aber gar kein solches, auf welches der Request passt, physisch existiert, bin ich mir gar nicht sicher, ob dieser Wert einen Inhalt hat.

        Außerdem braucht es doch eigentlich gar keine RewriteCond in so einem Falle - diese simple Bedingung kann man doch auch direkt in der RewriteRule unterbringen.

        Probier's mal so:

        RewriteEngine On
        RewriteRule ^([^.]+)$ /ius/foo.php?c=$1

        gruß,
        wahsaga

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

        1. ^. ↩︎

        1. Hi,

          REQUEST_FILENAME für die Bedingung zu nehmen, erscheint mir ungünstig - das wäre laut Doku "the full local filesystem path to the file or script matching the request". Wenn aber gar kein solches, auf welches der Request passt, physisch existiert, bin ich mir gar nicht sicher, ob dieser Wert einen Inhalt hat.

          Die Beschreibung paßt nicht zur Realität.
          REQUEST_FILENAME enthält die URL, so wie sie nach Anwendung aller bisherigen Rewrite-Rules aussieht.
          Weder ist das ein filesystem path noch ein full local ...

          Siehe dazu auch meinen Thread https://forum.selfhtml.org/?t=133032&m=861443, wo ich auch über diese unsinnige Beschreibung gestolpert bin.

          cu,
          Andreas

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

          RewriteEngine On
          RewriteRule ^([^.]+)$ /ius/foo.php?c=$1

          Das isses! Mir ist auch die Idee gekommen, einfach alle 404er abzufangen, und zu prüfen, ob ich "etwas sinvolles" damit machen kann. Wäre dieses Vorgehen sinnvoller, oder soll ich einfach diese "catch-all" Rewrite Regel verwenden?

          Gruß,
          Severin

          --
          They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
          -- Benjamin Franklin
          1. hi,

            Mir ist auch die Idee gekommen, einfach alle 404er abzufangen, und zu prüfen, ob ich "etwas sinvolles" damit machen kann. Wäre dieses Vorgehen sinnvoller,

            Pfui-Bah - nee, das lass' mal.
            Klar _könnte_ man das machen - aber das wäre doch eine ziemliche Vergewaltigung der Technik.

            oder soll ich einfach diese "catch-all" Rewrite Regel verwenden?

            Wenn sie sich nicht noch weiter verfeinern lässt.

            gruß,
            wahsaga

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

              Pfui-Bah - nee, das lass' mal.
              Klar _könnte_ man das machen - aber das wäre doch eine ziemliche Vergewaltigung der Technik.

              Das war deutlich - danke :)

              Wenn sie sich nicht noch weiter verfeinern lässt.

              Ich werde mir darüber noch weitere Gedanken machen. Vielleicht lass ich mir die .htaccess dynamisch generieren (immer wenn ein Benutzer dazukommt/gelöscht wird).

              Gruß,
              Severin

              --
              They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
              -- Benjamin Franklin
              1. hi,

                Vielleicht lass ich mir die .htaccess dynamisch generieren (immer wenn ein Benutzer dazukommt/gelöscht wird).

                Ich weiß zwar nicht genau, was du vorhast - aber wenn du mod_rewrite immer auf einen aktuell vorhandenen Datenbestand Bezug nehmen lassen willst, schau dir doch mal diesen Vorschlag hier von Sven an - ein Programm/Script als RewriteMap agieren lassen, könnte evtl. was für deinen Einsatzzweck sein.

                gruß,
                wahsaga

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

                  Ich weiß zwar nicht genau, was du vorhast - aber wenn du mod_rewrite immer auf einen aktuell vorhandenen Datenbestand Bezug nehmen lassen willst, schau dir doch mal diesen Vorschlag hier von Sven an - ein Programm/Script als RewriteMap agieren lassen, könnte evtl. was für deinen Einsatzzweck sein.

                  Dies wäre wohl die optimale Lösung, ich habe sie aber schon vorher Ausgeschlossen, weil sie nur im Server oder Virtual Host verwendbar ist (http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteMap) Ich bezweifle aber, dass mir der Informatik Dienst so viele Rechte geben wird.

                  Gruß,
                  Severin

                  --
                  They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
                  -- Benjamin Franklin
                  1. hi,

                    Dies wäre wohl die optimale Lösung, ich habe sie aber schon vorher Ausgeschlossen, weil sie nur im Server oder Virtual Host verwendbar ist (http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteMap) Ich bezweifle aber, dass mir der Informatik Dienst so viele Rechte geben wird.

                    Wenn du darlegen kannst, warum diese Lösung die optimale wäre, und welche Vorteile sie gegenüber anderen Basteleien hat - dann lässt der Server-Admin ja vielleicht mit sich reden, und richtet es für dich an der entsprechenden Stelle ein?
                    Einen Versuch wär's wert.

                    gruß,
                    wahsaga

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

                      Wenn du darlegen kannst, warum diese Lösung die optimale wäre, und welche Vorteile sie gegenüber anderen Basteleien hat - dann lässt der Server-Admin ja vielleicht mit sich reden, und richtet es für dich an der entsprechenden Stelle ein?

                      Gegen unseren Informatik Dienst in der Bastard Operator from Hell ein Chorknabe ;-)

                      Einen Versuch wär's wert.

                      Wenn ich nicht mehr poste - du kannst meine Stiefel haben :)

                      Gruß,
                      Severin

                      --
                      They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
                      -- Benjamin Franklin