↓ Archives ↓

Posts Tagged → mod_rewrite

mod_rewrite og MediaWiki

Jeg har lige smidt en wiki på shoporama.dk, og i forbindelse med det ville jeg have nogle pænere adresser. De guides jeg fandt var ikke specielt gode, så her er hvordan jeg fiksede det:

.htaccess i roden af sitet:

  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule (.*) index.php/$1 [L,QSA]

I LocalSettings.php

  $wgScriptPath  = "";
  $wgArticlePath = "/$1";
  $wgUsePathInfo = true;

Download med mod_rewrite

En af mine kammerater har et script der laver en filoversigt, og han havde brug for at lave et download-link, der fik browseren til at hente filen, og ikke bare vise den. Filerne var billeder og videoer.

En løsning kunne være at køre filen igennem php, og så sætte nogle headere, men det var også lidt grimt synes jeg. En anden måde var at få Apache til at sætte nogle headere der bare gjorde at alle billeder, videoer m.m. blev downloadet i stedet.

Problemet var så bare, at så virkede det almindelige link ikke. Jeg skulle altså finde en løsning hvor jeg kunne angive på en bestemt URL at den skulle downloades.

Løsningen blev et mod_rewrite trick:

RewriteEngine on
RewriteCond %{QUERY_STRING} download
RewriteRule \.(mov|mp4)$    -    [T=application/octet-stream]

Jeg kigger på om QUERY_STRING er “download”, og hvis den er det, så tilføjer jeg headeren “application/octet-stream” til filen. Ret simpelt :-)

At redirecte til ‘-’ er en speciel syntax der fortæller at mod_rewrite ikke skal redirecte.

Ovenstående bevirker at foo.mov bliver vist i browseren, men foo.mov?download bliver downloaded :-)

Undgå at folk linker til billeder

Hvis man vil undgå at folk linker til ens billeder eller videoer, kan man med mod_rewrite kigge på Referer-headeren, og se om brugeren kommer fra ens eget domæne

Her viser jeg hvordan man nægter adgang til .png-filer hvis folk ikke kommer fra www.example.com

1
2
3
RewriteEngine On
RewriteCond  %{HTTP_REFERER}  !^http://www.example.com/
RewriteRule \.png$ – [F]

[F] betyder Forbidden.

Det hjælper selvfølgelig ikke mod de folk der selv kan finde ud af at sætte Referer-headeren, men det hjælper mod almindelige browsere.