Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

So there's a file in Wordpress, wp-content/blogs.php, that serves files uploaded through Wordpress. There's a rewrite rule in the WP .htaccess that rewrites URLs of the format www.blah.com/files/11/01/filename.mp3 to URLs of the format www.blah.com/.../wp-content/blogs.php?file=filename.mp3.

RewriteRule ^(./)?files/(.) wp-content/blogs.php?file=$2 [L]

So here's the problem: we have gzip turned on for php files. I need to turn it off based on the query parameter "file", on blogs.php. (Not just because you're not supposed to gzip binaries, but because gzipping .mp3 creates severe problems for the Quicktime plugin in Firefox on both PC and Mac.)

But the following SetEnvIf isn't applied to any files served through blogs.php-- the Request_URI always ends in .php

SetEnvIfNoCase Request_URI \.mp3$ no-gzip dont-vary

The following fixes the problem by turning off gzip on all files served through blogs.php:

<Location /michael/blah/wp-content/blogs.php>        
     SetEnv no-gzip
</Location>

But it's not a good solution, because I want non-binary files served through blogs.php to be gzipped. So what I really want is a way to get the original URI, not the rewritten URI, because the original URI does end in .mp3. Or, I need to access the query parameter at the end of the rewritten URI (file=filename.mp3).

For instance, something like this would work, if it existed, which it doesn't:

SetEnvIfNoCase Original_Request_URI \.mp3$ no-gzip dont-vary

It looks like there's a variable THE_REQUEST that would work in a RewriteRule, but it doesn't seem available to SetEnv.

Any ideas? Thanks! And let me know if I'm violating any rules, it's my first time posting here.

share|improve this question

1 Answer 1

You can manipulate the environment from mod_rewrite, including turning off gzip:

RewriteCond %{QUERY_STRING} file=(.*)\.mp3$
RewriteRule ^(./)?files/(.) wp-content/blogs.php?file=$2 [L,E=no-gzip:1]

The first RewriteCond may not be necessary, but the last rule (the E flag) should do the trick in your setup regardless.

HTH.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.