[development] Rewrite rules and file access
Lee Rowlands
contact at rowlandsgroup.com
Wed Jul 14 20:49:53 UTC 2010
Thanks Jamie
This is the missing piece of the puzzle (lightbulb goes on).
So the question is - which offers the biggest performance hit - a
hook_init call to test which preset paths are protected by .htaccess
files (my files are in a subdirectory of each imagecache preset folder)
- protecting those that are not protected by creating the new .htaccess
file or the bootstrap? There are places where lists of thumbnails are
rendered.
I think the first option sounds like the lesser (albeit ugly) evil
Thanks everyone for all of your help and advice.
Lee
On Wed, 2010-07-14 at 09:15 -0400, Jamie Holly wrote:
> The best trick is to not use regular Drupal file paths on your pages and
> instead use an internal Drupal path, the same way the private download
> method does. Just alter your links using hook_node_view.
>
> If you want to keep the paths intact, then it takes a couple of
> .htaccess tricks.
>
> First to answer your question, yes Drupal's .htaccess rules check if a
> file exists and if so it serves it directly. This is necessary for
> things like css, js and theme images to load properly.
>
> You can force .htaccess to ignore certain paths. In Drupal's .htaccess,
> right before Drupal's rewrite rules (right after # RewriteBase /):
>
> RewriteCond %{REQUEST_URI} /sites/default/files/imagecache/.*
> RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
>
> Now any file request to /sites/default/files/imagecache/* will go
> through Drupal. Everything else will be handled normally.
>
> One note of caution though. If you are using this for thumbnails and you
> have a page with say 20 thumbnails on it, it will be a major performance
> hit. You are requiring Drupal to bootstrap for every one of those
> requests, so if a person hits that page, Drupal has to fire up 21 times
> (20 for images, once for the page). Even a decent dedicated server will
> have problems with that.
>
> The better alternatives are to either watermark all your thumbnails (ie:
> ImageCache Actions) and serve them directly, or to use a CDN that offers
> token based authentication, like VoxCAST.
>
> Jamie Holly
> http://www.intoxination.net
> http://www.hollyit.net
>
>
> On 7/14/2010 5:58 AM, Lee Rowlands wrote:
> > Hi
> > I asked this one on the list during Drupalcon SF but got no response
> > (the list was quiet that week!) so here goes again:
> >
> > *The Background*
> > ---------------
> > I've got a module I'm working on that needs to force some images to go
> > via the private download method.
> > This is working fine rerouting links via system/files in combination
> > with a htaccess file limiting direct access to the directory.
> > I also need thumbnails in various sizes of the images so it makes sense
> > to use imagecache.
> > I want the site in public download method except for these files and
> > I've successfully got the imagecache integration working.
> > I've used hook_menu_alter to prevent people accessing the relevant
> > imagecache file path directly, rerouting the imagecache cached images
> > via system/files.
> > The problem is, once the imagecache file is created, the file is no
> > longer being served via Drupal, with Apache serving it direct. This
> > obviously does not get near my access callback.
> >
> > *The Questions*
> > ---------------
> > Is this down to Drupal's rewrite rules?
> > Are the rewrite rules not evaluated if the file actually exists?
> > Can I create a rewrite rule to force this file to go through Drupal -
> > the relevant files all contain a common element in their path so I
> > should be able to match it) or do I need to consider alternatives such
> > as creating .htaccess files in the subfolders for each imagecache
> > preset, monitoring for new presets?
> >
> > Any suggestions welcome.
> > Lee Rowlands
> >
> >
> >
> >
More information about the development
mailing list