2009-12-02 8 views
0

Je suis aux prises avec un problème mod_rewrite qui implique des fichiers .css qui sont servis dynamiquement par un "programme" qui référence les images. Je dis "programme" car la pile technologique est un peu obscure, mais il suffit d'y insérer votre technologie préférée [perl | php | Java].mod_rewrite impliquant la chaîne de requête

Le fichier CSS est référencé à partir de la page en utilisant l'URL suivante:

http://server/dir/subdir/file-program?site-id=1234&fname=stylesheet.css 

Le contenu du CSS incluent des références d'image telles que les suivantes:

background-image:url('hello.png'); 
... 
background-image:url('world.png'); 

Le navigateur interprète ces références comme/dir/subdir/*. png.

Ce que je veux faire est de réécrire toutes ces demandes en utilisant l'URL du referrer afin qu'ils finissent par ressembler à:

http://server/dir/subdir/file-program?site-id=1234&fname=hello.png 
http://server/dir/subdir/file-program?site-id=1234&fname=world.png 

Notez que l'ID du site est variable, donc je vraiment besoin référencez le référent pour récupérer toute la chaîne de requête. Désolé, j'ai laissé ceci hors du message original. Autrement dit: Toute référence d'image provenant de ... fichier-programme ... *. Css doit être réécrite pour utiliser l'URL (y compris la chaîne de requête) de ce CSS, il suffit de substituer le nom du fichier image pour le CSS nom de fichier.

Toute aide serait grandement appréciée.

+0

tu ne peux pas fixer-programme de fichiers pour générer des URL comme ça? –

+0

Dominic, j'aimerais que ce soit si facile. Malheureusement "fichier-programme" n'est pas open-source ou quelque chose que je contrôle. Cela pourrait changer dans les futures versions du produit, mais pour l'instant je pense que mod_rewrite est le moyen le plus rapide de le résoudre. –

Répondre

1

Je ne peux pas faire des promesses, mais donner un coup de feu ce:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-s [OR] 
RewriteCond %{REQUEST_FILENAME} !-l [OR] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/dir/subdir/(*.)$ /dir/subdir/file-program?fname=$1&referer=%{HTTP_REFERER} 
RewriteRule ^/dir/subdir/file-program?fname=(.*?)&referer=(*.)siteid=([0-9]+) /dir/subdir/file-program?fname=$1&siteid=$3 
+0

Jordon, On dirait que j'ai omis un détail clé et que l'identificateur de site est variable, donc je voudrais référencer le référent (le fichier .css) pour récupérer la chaîne de requête. –

Questions connexes