Ich habe hier gerade einige mod_rewrite Anweisungen zu fassen, die irgendwie schon fast an Programmierung rankommen:
Code:
RewriteCond $2 (\.[^.]+)$
RewriteCond ${npshare:$1|NULL}%1 ^(.*(\.[^.]+))\2$
RewriteCond %1 !NULL
RewriteRule ^files/([0-9a-f]{8})(/.*)? %1 [L]
Wer das ohne Manual versteht: Respekt!

Wen es interessiert, ich schlüssel das mal eben auf:
Es handelt sich um URLs der Form /files/1234abcd/filename.ext (wo kommen die wohl her? *hust*)
Die erste Zeile matcht von filename.ext das .ext und speichert es in einer Gruppe. Die zweite Zeile lässt das 1234abcd in einer sog. RewriteMap nachgucken, hängt die in der ersten Zeile gematchte Endung an und matcht dagegen dann den Regexp ^(.*(\.[^.]+))\2$, der effektiv dafür sorgt, dass verglichen wird, ob die Rückgabe der RewriteMap die selbe Endung hat, die in der ersten Zeile gematcht wurde, und diese Rückgabe in einer neuen Gruppe speichert (auf die hinterher wieder mit %1 zugegriffen werden kann). Die dritte Zeile prüft nur noch, ob der Rückgabewert nicht NULL war (was heißt, dass nichts gefunden wurde). Falls also die Endung gleich war und überhaupt was gefunden wurde, ersetzt die vierte Zeile den Aufruf durch die Rückgabe der RewriteMap. Elegant daran: Es musste nur einmal die RewriteMap aufgerufen werden, die potentiell hohe Laufzeitkosten hat. Scheußlich daran: Die Funktionalität könnte man genau so gut in die RewriteMap selbst stopfen, weil die (zumindest bei mir) ein Script ist. Aber ich hatte gerade Spaß daran, es so zu machen. Bei genauer Betrachtung könnte ich vermutlich den Check auf !NULL weglassen… *kratz*

Naja, ich werds lieber nicht wirklich so verwenden. Denn sowas erzeugt unwartbare Projekte (das versteh ich ja selbst schon morgen nicht mehr)