mod_rewrite: /de/$foo wird /de/$foo.php
Schuer
- webserver
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
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
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
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
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.
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
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.phpleitet, 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
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
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.
[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
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.