RewriteRule mit Zero-Padding
Cheatah
- webserver
0 Christian Kruse0 Cheatah
0 Klaus Mock0 Cheatah
0 Sven Rautenberg0 Cheatah
Hi,
ich stehe vor dem Problem, ein nicht ganz leichtes URL-Rewriting durchführen zu dürfen. Der Request geht z.B. auf "/bla/123/", und als Ergebnis muss dann "/bla/0000/0000/0123.blub" ausgelesen werden.
Das Aufsplitten einer Zahl in Viererketten ist kaum 'ne Fingerübung, aber die (eventuell) fehlenden Nullen aufzufüllen macht mir dann doch etwas Kopfzerbrechen. Meine Lösung sähe mehr oder weniger so aus, erst mal "auf gut Glück" etwas wie "/bla///123.blub" zu erzeugen, und dann in späteren Rewrites alle "/(\d{0,3})/" durch "/0$1/" zu ersetzen (o.ä.), bis nichts mehr gefunden wird.
Ich bin davon überzeugt, dass das ganze auch in einem, maximal zwei Rewrites geht, nur fehlt mir der geniale Gedanke; zudem ist meine Erfahrung mit mod_rewrite noch recht minimal. Kann mir jemand auf die Sprünge helfen?
Cheatah
Hoi,
ich stehe vor dem Problem, ein nicht ganz leichtes URL-Rewriting durchführen zu dürfen. Der
Request geht z.B. auf "/bla/123/", und als Ergebnis muss dann "/bla/0000/0000/0123.blub"
ausgelesen werden.
Das Aufsplitten einer Zahl in Viererketten ist kaum 'ne Fingerübung, aber die (eventuell)
fehlenden Nullen aufzufüllen macht mir dann doch etwas Kopfzerbrechen. Meine Lösung sähe
mehr oder weniger so aus, erst mal "auf gut Glück" etwas wie "/bla///123.blub" zu erzeugen, und
dann in späteren Rewrites alle "/(\d{0,3})/" durch "/0$1/" zu ersetzen (o.ä.), bis nichts mehr
gefunden wird.
Ouch, das wird aber viel Traffic.
Ich bin davon überzeugt, dass das ganze auch in einem, maximal zwei Rewrites geht, nur fehlt
mir der geniale Gedanke; zudem ist meine Erfahrung mit mod_rewrite noch recht minimal. Kann
mir jemand auf die Sprünge helfen?
Wie waere es mit RewriteMap?
RewriteEngine On
RewriteMap scary-url prg:/path/to/perlscript
RewriteCond ^/bla/123/
RewriteRule ^/bla/123/ ${scary-url:/bla/123/|default-val}
perlscript:
#!/usr/bin/perl -w
$| = 1;
while(my $row = <STDIN>)
{
### die transformationen erspar ich mir jetzt, das kannst du besser
}
Gruesse,
CK
Hi,
Ouch, das wird aber viel Traffic.
naja, es findet alles noch serverintern statt, ohne Roundtrip zum Client. Ist aber trotzdem nicht hübsch...
Wie waere es mit RewriteMap?
Keine schlechte Idee; nur fürchte ich, dass ein Perlscript nicht wirklich die Zustimmung unserer IT findet... allein schon den Perl-Interpreter ein paar dutzend Mal pro Sekunde neu zu starten könnte ein wenig unperformant sein :-)
### die transformationen erspar ich mir jetzt, das kannst du besser
Danke :-)
Ich behalte die Idee mal im Hinterkopf; auf jeden Fall ist es eine Lösung, die ich testen werde - danke dafür! Ich bin aber weiterhin offen für Alternativen ;-)
Cheatah
Hoi,
Wie waere es mit RewriteMap?
Keine schlechte Idee; nur fürchte ich, dass ein Perlscript nicht wirklich die Zustimmung unserer IT
findet... allein schon den Perl-Interpreter ein paar dutzend Mal pro Sekunde neu zu starten könnte
ein wenig unperformant sein :-)
Tja, es muss ja nicht unbedingt ein Perl-Script sein. Schreib dir halt ein kleines C-Programm,
das tuts auch; viel laenger als 10 Zeilen braeuchte es ja nicht zu sein.
Gruesse,
CK
Hi,
Tja, es muss ja nicht unbedingt ein Perl-Script sein. Schreib dir halt ein kleines C-Programm,
das tuts auch; viel laenger als 10 Zeilen braeuchte es ja nicht zu sein.
klingt schon ein wenig freundlicher... obwohl ich unsere gestrenge IT schon meckern höre :-)
"Mein C-Mensch" ist leider erst nächste Woche wieder da; und da hier mittlerweile jemand auf eine etwas internere (potentielle) Möglichkeit hingewiesen hat, warte ich auf jeden Fall erst mal ab, was der dazu meint. Ich halte Dich aber auf dem laufenden :-)
Chea "Thanks again" tah
hi!
Keine schlechte Idee; nur fürchte ich, dass ein Perlscript nicht
wirklich die Zustimmung unserer IT findet... allein schon den
Perl-Interpreter ein paar dutzend Mal pro Sekunde neu zu starten
könnte ein wenig unperformant sein :-)
.oO( mod_perl )
bye, Frank!
Hi,
.oO( mod_perl )
steht leider aus Gründen, die sowohl den Rahmen als auch meine Schweigepflicht sprengen, zu meinem tiefsten Bedauern nicht zur Debatte. Aber thanks für den Gedanken :-)
Cheatah
Hoi,
.oO( mod_perl )
steht leider aus Gründen, die sowohl den Rahmen als auch meine Schweigepflicht sprengen, zu meinem tiefsten Bedauern nicht zur Debatte. Aber thanks für den Gedanken :-)
Und ist auch gar nicht moeglich in dem Fall.
Gruesse,
CK
Hallo,
Und was ist, wenn Du zuerst mal Nullen anhängst, und die überschüssigen dann in einem zweiten Schritt entfernst?
Dann kanstt Du "/bla/0000/0000/0000123.blub" mittels /0+(\d{4})/ auf /$1/ mappen.
Ist nur so eine Idee.
Grüße
Klaus
Hi,
Und was ist, wenn Du zuerst mal Nullen anhängst, und die überschüssigen dann in einem zweiten Schritt entfernst?
kein übler Gedanke. Kostet garantiert zwei Rewrites, ist aber damit O(1) und ergo überschaubar :-)
Prima Idee, danke!
Cheatah
Hi,
ich stehe vor dem Problem, ein nicht ganz leichtes URL-Rewriting durchführen zu dürfen. Der Request geht z.B. auf "/bla/123/", und als Ergebnis muss dann "/bla/0000/0000/0123.blub" ausgelesen werden.
Welcher Zahlenbereich muß denn da abgedeckt werden? Welcher Request kommt denn raus, wenn /bla/12345/ angefordert wird?
In Erweiterung der Idee, erstmal viele Nullen davorzusetzen:
Zunächst von /bla/123/ auf /bla/000000000123/, dann Viererketten bilden. Bei unterschiedlich langen Ziffernfolgen von hinten vielleicht eine kleine Herausforderung. :)
- Sven Rautenberg
Hi,
Welcher Zahlenbereich muß denn da abgedeckt werden?
zumindest ein- bis zehnstellige Zahlen.
Welcher Request kommt denn raus, wenn /bla/12345/ angefordert wird?
/bla/0000/0001/2345.blub
Im Grunde wird die Zahl zwölfstellig gemacht und nach jeder vierten Stelle durch einen Slash getrennt.
Zunächst von /bla/123/ auf /bla/000000000123/, dann Viererketten bilden.
Wird schwierig, weil ich nicht automagisch die nötige Zahl der Nullen ermitteln kann. Ich lasse mich gerne vom Gegenteil überzeugen; aber bei dieser Variante brauche ich glaube ich (fix) drei Rewrites.
Bei unterschiedlich langen Ziffernfolgen von hinten vielleicht eine kleine Herausforderung. :)
Ja - die unterschiedliche Länge ist es, die mir zu schaffen macht... ohne das wär's ja einfach :-)
Auch Dir danke,
Cheatah