所以在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。