Назад | Перейти на главную страницу

Как установить переменную среды на основе предварительно перезаписанного URI или параметра запроса после перезаписи?

Итак, в 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.