如何根据重写前的 URI 或重写后的查询参数设置环境变量?

如何根据重写前的 URI 或重写后的查询参数设置环境变量?

因此,WordPress 中有一个文件,它为通过 WordPress 上传的文件提供服务。WP中wp-content/blogs.php有一个将格式的 URL 重写为格式的 URL 。RewriteRule.htaccesswww.example.com/files/11/01/filename.mp3www.example.com/.../wp-content/blogs.php?file=filename.mp3

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

问题就在这里:我们为 PHP 文件启用了 gzip。我需要根据查询参数fileon将其关闭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 标志)应该在您的设置中发挥作用。

嗨嗨。

相关内容