YSlow告诉我我的css应该被压缩,但经过几个小时的修补,我不能为我的生活让gzip为我的网站工作。在这一点上,我甚至不确定性能是否增加(会有一个吗?)是值得的。
我在1& 1共享主机帐户上运行WordPress网站。
老实说,我真的不知道我在做什么这个东西,似乎无法得到适当的设置。我在一些地方读到1& 1,“模块Apache mod_deflate和mod_gzip没有安装。”所以我认为这是问题的一部分。
我尝试过以下代码:
这个似乎没有做任何事情:
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text\.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image\.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
这会导致500错误
<Location />
# Insert filter
SetOutputFilter DEFLATE
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>
这(来自html5样板)似乎也没有做任何事情:
<IfModule mod_deflate.c>
# Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
</IfModule>
</IfModule>
# HTML, TXT, CSS, JavaScript, JSON, XML, HTC:
<IfModule filter_module>
FilterDeclare COMPRESS
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $image/x-icon
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype
FilterChain COMPRESS
FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no
</IfModule>
<IfModule !mod_filter.c>
# Legacy versions of Apache
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
</IfModule>
</IfModule>
这一个似乎没有做任何事......
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript
我按照这里的教程
(http://mrrena.blogspot.com/2009/01/how-to-compress-php-and-other-text.html)
但这基本上完全打破了我网站的外观。
在我的Functions.php中试过这个,它似乎压缩了我的html,但是留下了一些js和css未压缩
if(extension_loaded("zlib") && (ini_get("output_handler") != "ob_gzhandler"))
add_action('wp', create_function('', '@ob_end_clean();@ini_set("zlib.output_compression", 1);'));
答案 0 :(得分:13)
所以,过了一会儿,我想出了如何压缩拥有1&amp; 1 Webhosting包的html,css和js文件。不支持Deflate!
对于动态内容,您将php.ini添加到您网站的根目录。 php.ini的内容:
zlib.output_compression =1
zlib.output_compression_level =9
当然你也可以选择另一个压缩级别,9是最高级别(并导致最高的服务器负载)。这将压缩您动态生成的html文件。
要压缩静态文件(css,js和images ...),您需要修改.htaccess文件。对于那个追加
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteOptions Inherit
ReWriteCond %{HTTP:accept-encoding} (gzip.*)
ReWriteCond %{REQUEST_FILENAME} !.+\.gz$
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.+) $1.gz [QSA,L]
</IfModule>
到您的.htaccess文件(您在网站的根目录中找到该文件 - 否则创建它)。 但压缩不是自动完成的。所以你必须自己压缩文件!使用例如7-zip并使用.gz压缩js和css文件 - &gt;结果应该是例如stylesheet.css.gz。 然后将文件上传到刚刚压缩的文件所在的目录。
现在应该可以了!
PS:压缩并不总是有用,尤其是当文件非常小时。因此,请检查压缩前后的差异。
答案 1 :(得分:7)
在我看来,你已经筋疲力尽了。看看上面的内容似乎主机确实没有mod_deflate或mod_gzip。所以我想你只是运气不好。
PHP解决方案确实只适用于HTML。所以坚持那个。 HTML也是添加压缩的最佳位置,因为大多数情况下,CSS和JS只在第一页上下载。
您可以通过PHP脚本将请求重定向到CSS和JS,并使用PHP进行压缩。但是我不会去那里,因为你还必须实现304 Not modified
并设置适当的expires头。
答案 2 :(得分:6)
启用gzip压缩
可以使用以下代码在php.ini中激活gzip压缩:
zlib.output_compression = On
zlib.output_compression_level = 9
allow_url_fopen = On
答案 3 :(得分:2)
我知道这个问题现在有点老了,但我找到了一个适合我的解决方案。
将名为“php.ini”的文件添加到包含以下内容的根文件夹中;
zlib.output_compression = On
zlib.output_compression_level = 9
然后(这是你可能没想到的一点)将以下内容添加到你的.htaccess文件中;
AddType x-mapp-php6 .html .htm .php
是的,没错。我已将php6
加入其中。显然,这将运行PHP的最新稳定版本(目前为5.4),这将允许gzip压缩。这也将通过PHP解析器运行.html
和.htm
文件,这意味着它们可以被压缩(不会通过PHP解析器运行的文件将被压缩)。您可以随意添加您希望通过PHP运行的任何其他扩展(例如.xml
)。
顺便说一下,如果您通过PHP运行.xml
个文件,请记住设置标题将其声明为xml文件,否则它将无法正常运行。
希望这有帮助!
答案 4 :(得分:0)
您可以通过将此代码添加到.htaccess文件中来启用压缩:
<IfModule mod_rewrite.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml image/svg+xml image/x-icon text/css application/x-javascript application/javascript application/x-httpd-php application/x-httpd-fastphp application/x-httpd-eruby
</IfModule>