Итак, в WordPress есть файл, wp-content/blogs.php
, который обслуживает файлы, загруженные через WordPress. Есть RewriteRule
в WP .htaccess
который перезаписывает URL-адреса формата www.example.com/files/11/01/filename.mp3
к URL-адресам формата www.example.com/.../wp-content/blogs.php?file=filename.mp3
.
RewriteRule ^(.*/)?files/(.*) wp-content/blogs.php?file=$2 [L]
Итак, вот проблема: у нас включен gzip для файлов PHP. Мне нужно отключить его на основе параметра запроса file
, на blogs.php
. (Не только потому, что вы не должны архивировать двоичные файлы, но потому, что сжатие .mp3
создает серьезные проблемы для плагина Quicktime в Firefox как на ПК, так и на Mac.)
Но следующие 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
быть сжатым. Так что мне действительно нужен способ получить оригинал URI, а не перезаписанный URI, потому что исходный URI заканчивается на .mp3
. Или мне нужно получить доступ к параметру запроса в конце перезаписанного URI (т. Е. file=filename.mp3
).
Например, что-то вроде этого работало бы, если бы оно существовало, чего нет:
SetEnvIfNoCase Original_Request_URI \.mp3$ no-gzip dont-vary
Похоже, есть переменная THE_REQUEST
это сработает в RewriteRule
, но кажется недоступным для SetEnvIf
.
Любые идеи?
Вы можете управлять средой из mod_rewrite, включая отключение gzip:
RewriteCond %{QUERY_STRING} file=(.*)\.mp3$
RewriteRule ^(./)?files/(.) wp-content/blogs.php?file=$2 [L,E=no-gzip:1]
Первый RewriteCond
может быть необязательным, но последнее правило (флаг E) должно помочь в вашей настройке.
HTH.