我怎样才能SetEnv基于预先重写的URI或重写后的查询参数?

所以在Wordpress中有一个文件,wp-content / blogs.php,通过Wordpress上传文件。 WP .htaccess中有一个重写规则,将www.blah.com/files/11/01/filename.mp3格式的URL重写为格式为www.blah.com/…/wp-content/blogs的URL .PHP?文件= FILENAME.MP3。

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

所以这里是问题:我们已经开启了PHP文件的gzip。 我需要根据查询参数“file”在blogs.php上closures它。 (不仅仅是因为你不应该gzip二进制文件,而是因为gzip压缩.mp3在Firefox和Mac上为Quicktime插件创build了严重的问题。)

但是以下SetEnvIf不适用于通过blogs.php提供的任何文件 – Request_URI总是以.php结尾

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

以下方法通过closures通过blogs.php提供的所有文件的gzip来解决问题:

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

但这不是一个好的解决scheme,因为我想通过blogs.php提供的非二进制文件进行压缩。 所以我真正想要的是获取原始 URI的方式,而不是重写的URI,因为原始URI确实以.mp3结尾。 或者,我需要在重写的URI(file = filename.mp3)末尾访问查询参数。

比如,像这样的东西就可以工作,如果它存在的话,那不是:

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

看起来有一个variablesTHE_REQUEST可以在一个RewriteRule中工作,但对SetEnv来说似乎不可用。

有任何想法吗? 谢谢! 让我知道如果我违反任何规则,这是我第一次在这里发表。

您可以从mod_rewrite操作环境,包括closuresgzip:

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

第一个RewriteCond可能不是必需的,但是最后一个规则(E标志)应该在你的设置中执行。

HTH。