我托管了一个 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 并且实际上得到了 game.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/