在apache htdocs中,我只想要压缩文件(gzip文件)并基于请求的接受编码类型,如果启用了gzip编码,我希望apache提供压缩文件,如果不支持gzip编码,那么我希望apache通过解压缩gzip文件来提供服务。如何根据请求接受的编码类型提供压缩/解压缩文件,只有压缩文件
我不想保留未压缩的文件并在访问时使用deflate进行压缩,因为这样做效率低下,默认情况下所有客户端都支持gzip编码。
通过在htdocs目录中同时使用压缩和非压缩文件(example.js和example.jsgz),我可以通过使用RedirectCond对请求的可接受编码和RedirectRules进行工作。但是这需要存储两个文件(压缩文件和普通文件)。以下是我用于重定向规则的配置。
<Directory /var/www/app>
AddEncoding gzip .jsgz .cssgz .htmlgz
AddType text/javascript .jsgz
AddType text/css .cssgz
AddType text/html .htmlgz
SetEnv force-no-vary
Header set Cache-Control "private"
RewriteEngine on
# If client accepts compressed files
RewriteCond %{HTTP:Accept-Encoding} gzip
# and if compressed file exists
RewriteCond %{REQUEST_FILENAME}gz -f
# send .htmlgz instead of .html
RewriteRule ^(.+)\.(html|css|js)$ $1.$2gz [L]
</Directory>
我不想这样做,因为我必须保持每个文件的两个版本。
例如:
里面的htdocs应用目录的内容的应用程序目录
在这种情况下与多视图选项
ls app/
example.jsgz
服务器端apache的配置,我能服务器example.jsgz当请求文件是example.js时example.js不存在。而就我的Apache侧的配置如下:
<Directory /var/www/htdocs/app>
AddEncoding gzip .jsgz .cssgz .htmlgz
AddType text/javascript .jsgz
AddType text/css .cssgz
AddType text/html .htmlgz
Options +Multiviews
SetEnv force-no-vary
Header set Cache-Control "private"
</Directory>
案例1:
请求头说gzip编码的支持。请求的网址是example.js,而不是example.jsgz。这是工作和example.jsgz文件与内容编码一起提供gzip和客户端能够解压缩和使用js文件。
Request URL:http://A.B.C.D/app/example.js
Request Method:GET
Request HTTP headers:
Accept-Encoding:gzip,deflate,sdch
Response Headers:
Content-Encoding:gzip
案例2:
请求头说,不支持gzip编码。请求的网址是example.js,而不是example.jsgz。这不起作用,因为Apache服务example.jsgz和客户端失败,因为不支持gzip编码。
Request URL:http://A.B.C.D/app/example.js
Request Method:GET
Request HTTP headers:
Response Headers:
Content-Encoding:gzip
当客户端不支持通过htdocs中的压缩文件来支持gzip编码的情况2有办法吗?
我已阅读关于充气和放气选项。还有关于Multiviews选项。但是当目录包含压缩格式(gzip编码)的多种类型的内容(javascript,css,html)时,我没有在目录级找到示例。
在此先感谢