You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加Expires Header后Pingdom检测始终显示为0的问题求助

解决Pingdom检测中“添加Expires头”项始终为0的问题

系统环境

  • CentOS 8.5
  • 集成ModPagespeed模块的Apache服务器
  • WordPress程序
  • 启用"W3 Total Cache"插件
  • 启用对接AWS Cloudfront CDN的"CDN Enabler"插件
  • 同时使用Cloudflare服务

问题描述

已在WordPress中启用W3 Total Cache插件,且.htaccess文件包含mod_expires配置段,但Pingdom速度测试的**"Add Expires headers"**项始终显示为0。尝试在httpd.conf的虚拟主机目录配置中添加mod_expires规则,清除所有缓存并关闭Cloudflare的DNS代理后,问题仍未解决。

当前配置文件内容

httpd.conf 虚拟主机目录配置

<Directory /home/DOMAIN/public_html/site_1>
    # Allow Using .htaccess
    AllowOverride Fileinfo Options
    
    <IfModule pagespeed_module>
        ModPagespeed On

        # ---- Old Code Before ChatGPT Help ----
        #ModPagespeedEnableFilters combine_css,combine_javascript
        #AddOutputFilterByType MOD_PAGESPEED_OUTPUT_FILTER text/html


        # ---- My Last Try with ChatGPT help ----
        ModPagespeedEnableFilters inline_css,inline_javascript
        ModPagespeedEnableFilters collapse_whitespace,remove_comments
        ModPagespeedEnableFilters insert_dns_prefetch
        ModPagespeedEnableFilters lazyload_images
        ModPagespeedEnableFilters local_storage_cache
        ModPagespeedEnableFilters extend_cache

        ModPagespeedRewriteLevel PassThrough

        # Disable caching HTML files
        ModPagespeedDisableFilters rewrite_style_attributes
        ModPagespeedDisableFilters rewrite_style_attributes_with_url
        ModPagespeedDisableFilters prioritize_critical_css

        # Disable caching dynamic content
        ModPagespeedDisableFilters defer_javascript
        ModPagespeedDisableFilters inline_import_to_link
        ModPagespeedDisableFilters inline_google_font_css
        ModPagespeedDisableFilters rewrite_javascript_external

    </IfModule>
    
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType image/jpeg "access plus 1 week"
        ExpiresByType image/png "access plus 1 week"
    </IfModule>
    
    
    <IfModule mod_deflate.c>
        SetOutputFilter DEFLATE
        # AddOutputFilterByType DEFLATE text/html text/plain text/xml ...
        # Add additional MIME types you want to compress

        # Compress everything except images and PDFs
        SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|pdf)$ no-gzip dont-vary

        # Compress certain file types based on MIME types
        <IfModule mod_filter.c>
            AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json application/rss+xml application/xml image/svg+xml
            # Add additional MIME types you want to compress
        </IfModule>
    </IfModule>
</Directory>

.htaccess 文件片段

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css A31536000
    ExpiresByType text/x-component A31536000
    ExpiresByType application/x-javascript A31536000
    ExpiresByType application/javascript A31536000
    ExpiresByType text/javascript A31536000
    ExpiresByType text/x-js A31536000
    ExpiresByType text/html A3600
    ExpiresByType text/richtext A3600
    . . . . . .
    . . . . . . 
</IfModule>

排查与解决步骤

1. 确认mod_expires模块是否加载

CentOS 8.5的Apache默认可能未启用mod_expires,先检查模块状态:

httpd -M | grep expires

若无输出,说明模块未加载,执行以下命令启用并重启Apache:

dnf install httpd-mod_expires
systemctl restart httpd

2. 解决ModPagespeed与Expires头的冲突

你的ModPagespeed配置中启用了extend_cache过滤器,该过滤器会覆盖或修改Expires头,导致Pingdom无法检测到预期规则。调整配置如下:

<IfModule pagespeed_module>
    # 禁用extend_cache过滤器,避免覆盖Expires头
    ModPagespeedDisableFilters extend_cache
    # 禁止ModPagespeed修改缓存控制头
    ModPagespeedModifyCachingHeaders off
</IfModule>

3. 统一Expires规则优先级

httpd.conf和.htaccess的mod_expires配置可能冲突,建议将所有规则统一放在.htaccess中,并补充缺失的MIME类型:

<IfModule mod_expires.c>
    ExpiresActive On
    # 图片资源
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/svg+xml "access plus 1 month"
    ExpiresByType image/webp "access plus 1 month"
    # 样式与脚本
    ExpiresByType text/css "access plus 1 year"
    ExpiresByType application/javascript "access plus 1 year"
    ExpiresByType text/javascript "access plus 1 year"
    # 字体资源
    ExpiresByType application/font-woff "access plus 1 year"
    ExpiresByType application/font-woff2 "access plus 1 year"
    # 文档与其他
    ExpiresByType text/html "access plus 1 hour"
    ExpiresByType application/pdf "access plus 1 month"
</IfModule>

4. 检查W3 Total Cache的缓存设置

W3 Total Cache的浏览器缓存设置可能覆盖.htaccess规则:

  • 进入WordPress后台 → 性能 → 浏览器缓存
  • 确保"设置HTTP头"选项启用,且缓存规则与手动配置的Expires时间一致
  • 若已手动配置.htaccess,可选择"禁用浏览器缓存"避免冲突

5. 验证CloudFront的缓存策略

AWS CloudFront可能覆盖源站的Expires头:

  • 登录CloudFront控制台,检查对应分发的缓存策略
  • 确保缓存策略允许源站的Expires和Cache-Control头传递给客户端
  • 清除CloudFront边缘缓存

6. 手动验证响应头

使用curl命令直接请求静态资源,检查是否返回Expires头:

curl -I https://your-domain.com/wp-content/themes/your-theme/style.css

若响应中包含Expires: [具体日期]和Cache-Control: max-age=[数值],说明配置生效,Pingdom可能存在延迟,稍后重新测试即可。

内容的提问来源于stack exchange,提问作者Hady Shaltout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:10:38