因此,WordPress 中有一个文件,它为通过 WordPress 上传的文件提供服务。WP中wp-content/blogs.php
有一个将格式的 URL 重写为格式的 URL 。RewriteRule
.htaccess
www.example.com/files/11/01/filename.mp3
www.example.com/.../wp-content/blogs.php?file=filename.mp3
RewriteRule ^(.*/)?files/(.*) wp-content/blogs.php?file=$2 [L]
问题就在这里:我们为 PHP 文件启用了 gzip。我需要根据查询参数file
on将其关闭blogs.php
。(这不仅是因为您不应该对二进制文件进行 gzip 压缩,还因为 gzip 压缩.mp3
会给 PC 和 Mac 上的 Firefox 中的 Quicktime 插件带来严重问题。)
但以下内容SetEnvIf
不适用于通过 提供的任何文件blogs.php
-Request_URI
始终以 结尾.php
。
SetEnvIfNoCase Request_URI \.mp3$ no-gzip dont-vary
以下步骤通过关闭通过 提供的所有文件的 gzip 来修复该问题blogs.php
:
<Location /michael/blah/wp-content/blogs.php>
SetEnv no-gzip
</Location>
但这不是一个好的解决方案,因为我希望非二进制文件能够blogs.php
被 gzip 压缩。所以我真正想要的是一种方法来获取原来的URI,而不是重写的 URI,因为原始 URI 确实以 结尾.mp3
。或者,我需要访问重写 URI 末尾的查询参数(即file=filename.mp3
)。
例如,如果存在这样的事情,它就会起作用,但事实并非如此:
SetEnvIfNoCase Original_Request_URI \.mp3$ no-gzip dont-vary
看起来有一个变量THE_REQUEST
可以在 中起作用RewriteRule
,但是它似乎不可用于SetEnvIf
。
有任何想法吗?
答案1
您可以从 mod_rewrite 操纵环境,包括关闭 gzip:
RewriteCond %{QUERY_STRING} file=(.*)\.mp3$
RewriteRule ^(./)?files/(.) wp-content/blogs.php?file=$2 [L,E=no-gzip:1]
第一个RewriteCond
可能不是必需的,但无论如何,最后一个规则(E 标志)应该在您的设置中发挥作用。
嗨嗨。