我托管一个JavaScript游戏,该游戏基本上由.html和.data文件组成。如果我用gzip压缩它们,它们的大小将缩小到25%。所以我想这样做。
我不确定100%,但是我认为使用mod_gzip或mod_deflate可以即时进行压缩,因为内容不会更改,因此一直在浪费CPU时间。
所以我想预编译内容。因此,我将.gz放在未压缩的文件旁边,并将重写规则放在.htaccess中:
RewriteEngine on
# If client accepts compressed files
RewriteCond %{HTTP:Accept-Encoding} gzip
# and if compressed file exists
RewriteCond %{REQUEST_FILENAME}.gz -f
# send .html.gz instead of .html
RewriteRule ^(.+)\.(html|css|js|data)$ $1.$2.gz [T=text/$2,E=GZIP:gzip,L]
Header set Content-Encoding gzip env=GZIP
重定向正常工作,我可以请求game.html并实际获得delivieredgame.html.gz。但是,浏览器不仅会显示它。相反,它询问我将文件保存在何处。我该如何解决?也许还有另一种方法可以实现我的目标?
最佳答案
这就是我解决相同问题的方式。
在.htaccess中添加新类型:
AddEncoding gzip .jsgz .cssgz .htmlgz .datagz
AddType application/javascript .jsgz
AddType text/css .cssgz
AddType text/html .htmlgz
AddType text/plain .datagz
这样做是因为
AddType
指令不接受.html.gz格式的扩展名。然后修改您的重写规则:
RewriteRule ^(.+)\.(html|css|js|data)$ $1.$2gz [L]
最后,重命名您的文件。从.html.gz,.js.gz等中删除点。
完整的.htaccess文件如下所示:
AddEncoding gzip .jsgz .cssgz .htmlgz .datagz
AddType application/x-javascript .jsgz
AddType text/css .cssgz
AddType text/html .htmlgz
AddType text/plain .datagz
RewriteEngine on
# If client accepts compressed files
RewriteCond %{HTTP:Accept-Encoding} gzip
# and if compressed file exists
RewriteCond %{REQUEST_FILENAME}gz -f
# send .html.gz instead of .html
RewriteRule ^(.+)\.(html|css|js|data)$ $1.$2gz [L]
关于javascript - 如何托管在Apache中预压缩的静态内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16883241/