Schuer: mod_rewrite: /de/$foo wird /de/$foo.php

Guten Morgen!

ich benötige eine kurze Regel, die

domain.tld/de/$foo  auf  domain.tld/de/$foo.php  und
domain.tld/en/$foo  auf  domain.tld/en/$foo.php

leitet, um schöne Verzeichnis-URLs in der Adresszeile zu behalten, während alle PHP-Files in den beiden Ordnern liegen.

Mein Ansatz war:

RewriteCond %{REQUEST_URI} de/(.*)$
RewriteRule de/foo$ /de/foo.php

was für den Einzelfall domain.tld/de/foo -> domain.tld/de/foo.php bestens funktioniert. Mache ich aus der zweiten Zeile nun aber ein allgemeines

RewriteRule de/(.*)$ /de/$1.php

erhalte ich einen 500er. Kann mir jemand erklären, warum das so ist und wie man die oben beschriebene Absicht technisch hinkriegt?

Viele Grüße!
_ds

--
Liam und Noel pöbeln sich durch Top 5-Listen, während Herr Einbecker andächtig der Musik lauscht und wir anderen auf »Wonderwall« warten.
Top 5-Blog, Top 5 Sponsoren-Memory
  1. Oh, zu schnell gepostet. Kurz nach dem Abschicken flüsterte mir jemand das hier zu:

    RewriteRule ^de/([^/.]+)/?$ de/$1.php [L]

    Das funktioniert prima. Sorry für die Störung und danke für die Hilfe! ;-)

    Viele Grüße!
    _ds

    --
    Die Bedienung eines Coffee Houses ist recht einfach. Es gibt keine. Man bestellt stattdessen direkt an der Theke.
    Top 5-Blog, Verhalten im Coffee House
    1. Moin!

      Oh, zu schnell gepostet. Kurz nach dem Abschicken flüsterte mir jemand das hier zu:

      RewriteRule ^de/([^/.]+)/?$ de/$1.php [L]

      Das funktioniert auch alleine, ohne die RewriteCond-Zeile, schon so.

      Wobei die Frage ist, ob das, was du da geschrieben hast, dem entspricht, das du meinst. :)

      - Sven Rautenberg

      --
      My sssignature, my preciousssss!
      1. Wobei die Frage ist, ob das, was du da geschrieben hast, dem entspricht, das du meinst. :)

        Ich meinte das, was das hier macht, egal wie ich es beschrieben habe :-)

        RewriteCond %{REQUEST_URI} !/$
        RewriteRule ^de/([^/.]+)/?$ de/$1.php [L]

        Fürs Archiv übrigens nochmal in einfachen Worten:

        Mit der oben genannten Regel innerhalb der .htaccess zeigt ein Link in der Form http://www.domain.tld/de/rubrik intern auf http://www.domain.tld/de/rubrik.php, während jedoch ein Slash am Ende (http://www.domain.tld/de/rubrik/) ignoriert wird und wie gewohnt eine index erwartet (http://www.domain.tld/de/rubrik/index.php).

        Einzige Absicht der Sache ist, dass die URLs aufgrund der fehlenden Dateiendung schöner/verständlicher/sprechender werden.

        Viele Grüße!
        _ds

        --
        Grand Prix Vorausscheidung: Herrlich! Überzeugender kann man sich kaum blamieren, falls man nicht gerade mit zwei Tüten Eis in der Hand auf der Kölner Domplatte vor 20 Schulkindern auf die Fresse fällt.
        Das kleine Seitenschwein, dub du dubn da dap da
        1. Hi Schuer,

          Mit der oben genannten Regel innerhalb der .htaccess zeigt ein Link in der Form http://www.domain.tld/de/rubrik intern auf http://www.domain.tld/de/rubrik.php, während jedoch ein Slash am Ende (http://www.domain.tld/de/rubrik/) ignoriert wird und wie gewohnt eine index erwartet (http://www.domain.tld/de/rubrik/index.php).

          Bitte unterlasse doch das Verlinken dieser nicht existenten Domain bzw. sogar nicht existenten TLD oder noch besser verwende example.org & Co als Beispieldomains :-\

          MfG, Dennis.

          1. Bitte unterlasse doch das Verlinken dieser nicht existenten Domain bzw. sogar nicht existenten TLD oder noch besser verwende example.org & Co als Beispieldomains :-\

            Ich verstehe nicht, was an der Angabe der (gültigen) Domain example.org sinnvoller ist als an der (ungültigen) domain.tld?

            Die Verlinkungen habe ich übrigens allein wegen der besseren Übersicht gemacht. Man muss da ja nicht unbedingt draufklicken ;-)

            Viele Grüße!
            _ds

            --
            Den Winter erkennt man recht zuverlässig an der Konsistenz der Nutella. Beim Nusspli wird's ähnlich sein.
            Top 5-Blog, The Importance Of Being Idle (2)
  2. hi,

    ich benötige eine kurze Regel, die

    domain.tld/de/$foo  auf  domain.tld/de/$foo.php  und
    domain.tld/en/$foo  auf  domain.tld/en/$foo.php

    leitet, um schöne Verzeichnis-URLs in der Adresszeile zu behalten, während alle PHP-Files in den beiden Ordnern liegen.

    Dazu brauchst du nicht mal mod_rewrite, das bekäme auch MultiViews schon hin.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Dazu brauchst du nicht mal mod_rewrite, das bekäme auch MultiViews schon hin.

      Das hatte man mir bei #self auch als erstes erklärt, funktionierte jedoch - warum auch immer - nicht.

      Viele Grüße!
      _ds

      --
      Damit wird er uns nun in Erinnerung bleiben; genau wie Axel Schulz als derjenige, der immer fleißig auf den Mund geboxt wurde und trotzdem Spaß dabei hatte. Oder Carsten Spengemann als Ex-DSDS-Moderator und derjenige, der einen Igel im Gesicht trägt.
      Medienrauschen, Popsuppenstars: Henn. Bohlen.
  3. Hi Schuer,

    domain.tld/de/$foo  auf  domain.tld/de/$foo.php  und
    domain.tld/en/$foo  auf  domain.tld/en/$foo.php

    Kurz (wie von wahsaga bereits erwähnt):

    [link:http://httpd.apache.org/docs/2.0/mod/core.html#options@title=Options] +MultiViews

    Oder, mit mod_rewrite:

    [link:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule@title=RewriteRule] ^(de|en)/([^\/.])$ /$1/$2.php

    Oder in Abhängigkeit davon, ob die angeforderte Datei existiert:

    [link:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond@title=RewriteCond] %{SCRIPT_FILENAME} !-f  
    [link:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule@title=RewriteRule] ^(de|en)/([^\/.])$ /$1/$2.php
    

    Du wirst eventuell noch das Rewriteflag QSA (Query String Append) benötigen.

    MfG, Dennis.

    1. [link:http://httpd.apache.org/docs/2.0/mod/core.html#options@title=Options] +MultiViews

      Funktioniert in diesem Fall - warum auch immer - leider nicht.

      RewriteRule ^(de|en)/([^/.])$ /$1/$2.php[/code]

      Auch das bringt leider nicht das gewünschte Ergebnis. Bringt einen 404er oder 500er, kann ich gerade leider nicht genau sagen, weil ich nicht am Arbeitsplatz bin.

      Du wirst eventuell noch das Rewriteflag QSA (Query String Append) benötigen.

      Evtl ja, danke für den Hinweis.

      Viele Grüße!
      _ds

      --
      Wenn sich Jungs und Männer in die Hauptdarstellerin eines Films verlieben, dann kann das diverse Gründe haben. Lara Croft etwa deshalb, weil sie eine Heldin ist und tolle Waffen hat. Prinzessin Leia vielleicht deshalb, weil sie eine Prinzessin ist und in Star Wars mitspielt. Und manche sind auch verrückt nach Mary.
      Top 5-Blog, Für Jungs und Männer: Filmfrauen zum Verlieben
      1. Hi Schuer,

        RewriteRule ^(de|en)/([^/.])$ /$1/$2.php[/code]

        Auch das bringt leider nicht das gewünschte Ergebnis. Bringt einen 404er oder 500er, kann ich gerade leider nicht genau sagen, weil ich nicht am Arbeitsplatz bin.

        Da fehlt auch ein + nach dem [^/.] ;-) Andernfalls werden nur Dateinamen mit der Länge eines Buchstabens gematcht *g*

        MfG, Dennis.