防止apache在重写时改变内容类型
Prevent apache from changing content type when rewriting
我有一个静态网页,想通过提供所有可用文件的 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 (.+) .gz [L]
</IfModule>
重写工作完美,但不幸的是,服务器也将响应的 Content-Type 更改为 application/x-gzip使浏览器下载文件而不渲染它。有没有办法阻止 apache 服务器更改内容类型并呈现页面而不是下载 gz?
这需要您拥有以下格式的 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))$ .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>
我有一个静态网页,想通过提供所有可用文件的 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 (.+) .gz [L]
</IfModule>
重写工作完美,但不幸的是,服务器也将响应的 Content-Type 更改为 application/x-gzip使浏览器下载文件而不渲染它。有没有办法阻止 apache 服务器更改内容类型并呈现页面而不是下载 gz?
这需要您拥有以下格式的 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))$ .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>