跨境电商
经验交流分享

Apache服务器gz格式Sitemap乱码解决办法

晚上写代码到底是好是坏真的说不清楚,昨天晚上给一个Magento站点debug Sitemap错误的问题,一个晚上硬是没有找到问题所在。该网站的tag非常巨大,根据sitemap的最佳实践,应该将sitemap给index下,然后放在不同的文件中并gzip压缩。

该站点的代码完全正常,把生成的xml文件直接var_dump出来,并且放到本地,完全无错。通过FTP下载到本地也能够打开。唯独通过http直接访问并下载sitemap文件打开显示乱码。

…此处省略一万字…

虽然debug是痛苦的,但是解决问题是快乐的。问题出现的原因是个很有意思的过程。首先在Magento扩展的Sitemap.php代码中,使用gzopen ()方法,首先创建了一个.gz文件。而apache的mod_deflate模块也同时开启,并且没有排除gz文件的压缩传送。于是,通过浏览器打开的sitemap文件,实际上是被压缩了两次。第一次是PHP创建的时候就是gz文件格式。http请求之后,apache又一次把这个文件给压缩了。

这就是坑爹的debug过程。附上这苦逼的两行。通过”SetEnvIfNoCase Request_URI \.gz$ no-gzip dont-vary”来排除任意不想压缩传输的文件。

[html]

<IfModule mod_deflate.c>

############################################
## enable apache served files compression
## http://developer.yahoo.com/performance/rules.html#gzip

# Insert filter on all content
SetOutputFilter DEFLATE
# Insert filter on selected content types only
AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript

# 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
SetEnvIfNoCase Request_URI \.xml$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.gz$ no-gzip dont-vary

# Make sure proxies don’t deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</IfModule>

[/html]

赞(0)
未经允许不得转载:锐想 » Apache服务器gz格式Sitemap乱码解决办法
分享到: 更多 (0)

评论 1

评论前必须登录!

 

锐想电商 - 跨境电商经验交流分享

锐想无限