我有一个静态网页,希望通过提供所有可用文件的gzip版本来提高加载性能。该页面在apache服务器 mod_gzip 上运行,除了.htaccess文件外,我无法更改任何配置。 因此,我在构建过程中创建了gzip文件,并希望将传入的请求重写为.gz文件。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
ReWriteCond %{HTTP:accept-encoding} gzip
ReWriteCond %{REQUEST_FILENAME} !.+\.gz$
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.+) $1.gz [L]
</IfModule>
重写效果很好,但不幸的是,服务器还会更改 application / x-gzip 响应的 Content-Type ,这会使浏览器下载文件而不是渲染它。有没有办法阻止apache服务器更改内容类型并呈现页面而不是下载gz?
答案 0 :(得分:0)
这要求您具有以下格式的文件的2个版本。例如:
index.html
index.html.gz
styles.css
styles.css.gz
scripts.js
scripts.js.gz
此htaccess将重写将gz版本发送到浏览器的请求,但也会保留原始文件的类型。您必须强制要发送的文件类型。否则它将使用application/x-gzip
,浏览器将下载该文件。
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json application/javascript application/vnd.ms-fontobject application/font-ttf application/font-woff application/font-otf image/svg+xml
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.*\.(html|css|js|eot|ttf|woff|otf|svg))$ $1.gz [L]
</IfModule>
AddEncoding x-gzip .gz
<FilesMatch .*\.html.gz>
ForceType text/html
</FilesMatch>
<FilesMatch .*\.css.gz>
ForceType text/css
</FilesMatch>
<FilesMatch .*\.js.gz>
ForceType application/javascript
</FilesMatch>
<FilesMatch .*\.eot.gz>
ForceType application/vnd.ms-fontobject
</FilesMatch>
<FilesMatch .*\.ttf.gz>
ForceType application/font-ttf
</FilesMatch>
<FilesMatch .*\.woff.gz>
ForceType application/font-woff
</FilesMatch>
<FilesMatch .*\.otf.gz>
ForceType application/font-otf
</FilesMatch>
<FilesMatch .*\.svg.gz>
ForceType image/svg+xml
</FilesMatch>