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/

相关文章:

php - 请求实体太大 apache

javascript - 没有对具有相同 URL 的新图像的新请求

php - 为什么 www.example.com/index.php/my/path/here 是由 index.php 处理的?

javascript - 10 秒延迟(无法滚动或单击按钮),即使在浏览器的加载微调器完成并且所有内容都出现在页面上之后

php - 我应该在 Windows Server 2012 R2 上使用 wampserver 还是在服务器上安装 apache、mysql 等

html - 尝试在 htaccess 文件中重定向 301 %E2%80%A6

regex - .htaccess RewriteRule 在 url 中带有斜线

facebook - 单页网站、搜索引擎优化和社交媒体共享按钮

javascript - 在 Angular 中使用 ng-if 时 View 不会更新

javascript - 如何测试 Date 对象是否等于特定日期