Avatar billede cronck Nybegynder
26. november 2010 - 16:59 Der er 13 kommentarer og
1 løsning

Hjælp til mod_rewrite

Hej,

Jeg er endnu aldrig blevet særlig skrap til mod_rewrite. De simpleste ting er altid noget jeg kan bokse med 4-5 timer, før skidtet virker.

Jeg har et script "gen.php" som genererer png-billeder, udfra parametre som højde, bredde, og farver.

Indtil videre er der linket til scriptet med URL'er som "gen.php?h=100&w=200&c1=FFFFAF&c2=0000A0&v=0".
Så tjekker scriptet om der allerede eksisterer en fil med de "egenskaber", hvorefter billedet bliver genereret eller læst, og sendt med en image-header.

Betyder det ikke at nogen browsere ikke vil cache billedet lokalt?

Tænker at det måske er smartere at lave så apachen tjekker om for eks. "g_100x200_FFFFAF_0000A0_0.png" eksisterer, når billedet bliver forsøgt hentet fra mappen, og hvis ikke, at URL'en så bliver rewritet i dette tilfælde til: "gen.php?h=100&w=200&c1=FFFFAF&c2=0000A0"

Er det en helt tåbelig måde at gøre det på?
Andre forslag/idéer modtages gerne.

Evt. nogen som kan bikse sådan en rewrite-regel sammen?
Avatar billede The_Buzz Novice
26. november 2010 - 17:23 #1
Du må lige lege med den her - den er omskrevet fra:
<FilesMatch "\.(html|htm|php|css)$">
Header set Cache-Control "max-age=600, private, proxy-revalidate"
ExpiresDefault "access plus 5 minutes"
</FilesMatch>


til din
<FilesMatch "gen.php">
Header set Cache-Control "max-age=600, private, proxy-revalidate"
ExpiresDefault "access plus 5 minutes"
</FilesMatch>

Den expirer efter 5 min som angivet.

Mth. check om der eksisterer en fil navngivet den du har der...
Aner ikke om Apache har en file exists funktion, det tror jeg ikke.

Hvilken image type sendes den som? PNG? Hvis du kan lægge det php script i en mappe for sig selv, sammen med en .htaccess - med denne:
<FilesMatch "\.(png)$">
Header set Cache-Control "no-cache, must-revalidate"
ExpiresDefault "no cache"
</FilesMatch>

Vil browseren ikke cache den.

Reserves rights for errors :D
Avatar billede cronck Nybegynder
26. november 2010 - 17:32 #2
Well, det med expire efter 5 min er der ikke nogen grund til, hvis den kaldte URL til scriptet er 100% den samme som for 20 min siden.

Billederne er PNG, ja. :)

Mht. den sidste du nævnte. Den skal helt sikkert være der, men den kan jeg jo så ikke bruge til noget, før jeg får apachen til at tjekke om billedet allerede er genereret.

Jeg er ret sikker på at det kan gøres med Mod_rewrite
Avatar billede Slettet bruger
26. november 2010 - 17:36 #3
Der er ikke nogen grund til at rewrite i første omgang.
Alle moderne browsere cacher også sider/billeder, selvom der er en query-streng bagpå, hvis bare strengen er den samme fra gang til gang.
Der er ikke nogle der skal læse adresserne, og det gør alligevel ikke det store sikkerhedsmæssigt. Har du lavet en fejl i scriptet som kan udnyttes (og som nogen gider bruge tid på at udnytte), så er de skam ligeglade med filendelsen.
Avatar billede The_Buzz Novice
26. november 2010 - 17:38 #4
Avatar billede cronck Nybegynder
26. november 2010 - 17:41 #5
Har set den og mange andre.
Ingen af de løsninger jeg har fundet, har jeg kunne bikse sammen til mit behov. :)
Avatar billede The_Buzz Novice
26. november 2010 - 17:43 #6
kald

<img src="/test_fil_eksisterer_dir/g_100x200_FFFFAF_0000A0_0.png">

edit .htaccess i det dir:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ lavnyfil.php?$1 [L,B]

Så kan du bruge explode(); http://php.net/manual/en/function.explode.php til at explode filename og lave en ny png?
Avatar billede cronck Nybegynder
26. november 2010 - 17:46 #7
Smart thinking!

Havde slet ikke tænkt på at man blot kunne parse URL'en ind i en PHP :)

Prøver lige at rode med dét
Avatar billede The_Buzz Novice
26. november 2010 - 17:49 #8
Keep me updated :o)
Avatar billede The_Buzz Novice
26. november 2010 - 17:52 #9
*host*

Du skal ha den lavnyfil.php udenfor det test_fil_eksisterer_dir dir - ellers går den i cirkulær rundsving og knækker serveren midt over :D
Avatar billede cronck Nybegynder
26. november 2010 - 17:56 #10
Scriptet der genererer billederne ligger i en anden mappe :)

Den parser filnavnet uden problemer igennem til mit script, hvis ikke billedet eksisterer.

Hvis billedet eksisterer, kalder den ikke PHP-scriptet, og returnerer heller ikke billede-filen.
Avatar billede Slettet bruger
26. november 2010 - 18:04 #11
Som sagt i #3, lad være :)
Avatar billede The_Buzz Novice
26. november 2010 - 18:10 #12
Her er et svar hvis jeg hjalp dig Cronck.. :)
Avatar billede cronck Nybegynder
26. november 2010 - 18:13 #13
Det har helt sikkert hjulpet mig i den rigtige retning, vil jeg selv mene. :)

Det virker dog stadig ikke - Ved ikke om du overså min sidste post?

Hvis billede-filen ikke eksisterer virker det fint.
Eksisterer billedet derimod, returnerer den hverken billedet, eller scriptet som kan generere det.
Avatar billede cronck Nybegynder
26. november 2010 - 18:41 #14
Fik det til at virke nu.
Ved ikke lige hvorfor den drillede før, og ikke nu.

Tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester