javascript - 如何托管在 apache 中预压缩的静态内容?

标签 javascript apache .htaccess mod-rewrite http-compression

我主持了一个 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/

相关文章:

javascript - Three.js CanvasRender问题:面孔忽隐忽现

javascript - Vue路由器在新页面上回到顶部

apache - 如何将以/test/开头的 URL 重定向到单独的脚本?

apache - 禁止从没有.htaccess的Apache访问文件

apache - 如何使用 Camel 的 'doneFileName' 属性作为具有双扩展名的文件名?

php - 加载特定的 PHP 版本

linux - 值未传递给 $1 - .htaccess

Javascript 自然排序对象

javascript - 通过Firebase auth()管理其他用户帐户

.htaccess 规则,重写 url 中的 key