6

感谢您的光临。我真的自己尝试过,但又一次对我来说似乎太多了。

情况...


我在共享主机上使用自己的网站。当我想要压缩大量 cms 生成的 js 和 css 以使 PageSpeedInsights 和我自己开心时,我读了进去,最后发现我的主机既没有 mod_gzip 也没有 mod_deflate 安装。安装的是ZLIB。所以我搜索了一下。找到了典型的 php append 解决方案并且不喜欢它。为 htaccess 找到了几行简洁的代码,这让我很高兴,因为它们可以立即工作:

AddHandler application/x-httpd-php .html .htm .php .js
php_flag output_buffering On
php_value output_handler ob_gzhandler
php_flag zlib.output_compression Off

我通过使用GIDZipTest确认它正在工作。这一切都很好,我喜欢它。

但是,一旦我将 .css 放入 AddHandler 列表,我的页面就完全崩溃了。
我尝试将带有 ob_gzhandler 的 php 解决方案仅用于 css 文件,但它最终根本不起作用。只是什么都不做。


解决方法?(并不真地)


我手动缩小了所有 css 并上传了每个文件的 css.gz 版本,并提供给它

RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]

这也很好。


问题!


  1. 我需要为 css 压缩工作定义/指定什么?我觉得我只是缺少一些转换的东西......

  2. 当我将手动缩小的 .css.gz 文件提供给客户端时,它们还会被额外压缩吗?

  3. 这在文件大小方面是否有任何进一步的优势,还是我应该坚持手动提供的版本并给出关于 Google PageSpeed 的**?
    (GIDZipTest 仍然显示“假设”场景,即使是缩小的文件,老实说,这是令人印象深刻的数字。我希望......)

预先感谢您提供的任何评论。
此致

玛丽安

4

4 回答 4

0

PHP+zlib 解决方案自动压缩从网络服务器提供的每个 PHP 文件。这意味着您放入 php 处理程序中的每个文件都将被压缩发送到客户端浏览器。无论如何, AddHandler 指令告诉网络服务器将 css 文件作为 php 脚本处理,这就是我认为它们“损坏”的原因。Css 文件应该有自己的处理程序(text/css)。

另一个(未经测试的)解决方案可能是保留您最初定义的处理程序:

AddHandler application/x-httpd-php .html .htm .php .js .css

并在您的 css 文件顶部添加此 php 代码:

<?php header('Content-Type: text/css'); ?>

但我不确定这是否可行。这应该告诉浏览器他们实际上正在接收 css 文件。

在这些情况下,最好的解决方案是您提到的 mod_deflate。

于 2012-09-08T13:52:49.710 回答
0

您以压缩的形式交付内容,但不仅仅是为了传输,这将通过Content-Encoding完成。因此客户端在解释内容之前不会对其进行解压缩。

您可以启用MultiViews以允许使用mod_negotiation进行自动内容协商

<FilesMatch "\.css$">
    Options MultiViews
</FilesMatch>
于 2012-09-08T16:18:44.487 回答
0

因此,如果您遇到类似的问题,我建议您阅读本文并正确设置完整的 Web 目录路径

创建一个 php 脚本(例如:“gzip-css.php”)

<?php
ob_start("ob_gzhandler");
header("content-type: text/css; charset: UTF-8");
?>

并在前面加上 .htaccess

<FilesMatch "\.css$">
ForceType application/x-httpd-php
php_value auto_prepend_file "/full/path/to/that/file/see/link/above/gzip-css.php"
</FilesMatch>

到所有 .css 文件。到目前为止,这似乎是我唯一的解决方案。如果我之前找到了完整的路径,我会在不问这里的情况下做到这一点。也许有人仍然对如何将 AddHandler 版本与 css tho 结合起来有更好的想法。

不起作用的事情(完全禁用所有 css):
- 将 .css 添加到 AddHandler 和上述任何(包括我的)解决方案。
- 提供手动 gzip 压缩的 css 文件并预先添加内容类型脚本
- 两者的结合

于 2012-09-10T08:10:46.637 回答
0

老问题,但我找到了一个对我有用的 .htaccess 解决方案,无需修改任何代码。

AddHandler application/x-httpd-php .html .htm .php .js .css
<Files *.css>
    Header set Content-type "text/css"
</Files>
php_flag zlib.output_compression On
php_value zlib.output_compression_level 5
于 2015-05-14T01:15:16.867 回答