2

我试图弄清楚如何检查ModPagespeed是否已通过 PHP 在当前域上启用和允许。我已经编写了以下代码,但我对这个解决方案并不完全满意。它有效,但它是一个瓦罐。

使用Pagespeed 过滤器摘录 .htaccess(服务于不同的域):

<IfModule pagespeed_module>
  ModPagespeed On
  ModPagespeedRewriteLevel PassThrough
  ...
  ModPagespeedEnableFilters combine_css
  ...
</IfModule>

摘自 pagespeedtest.html:

...
<head>
...
  <!-- If combine_css filter is active, the following code should be combined -->
  <style type="text/css" media="all">@import url("/style1.css");</style>
  <style type="text/css" media="all">@import url("/style2.css");</style>
  <style type="text/css" media="all">@import url("/style3.css");</style>
...
</head>

检查此 PHP 代码是否启用或允许 Pagespeed:

        $psturl = 'http://'. $_SERVER['HTTP_HOST'] .'/pagespeedtest.html';
        $pagespeed_is_active = TRUE;
        $pstheaders = get_headers($psturl, 1);
        if ($pstheaders['Content-Length'] == 960) {
          $pagespeed_is_active = FALSE;
        }

我使用 PHP 5 函数get_headers($url)获取 Content-Length 标头。我知道原始文件的长度为 960 字节,所以我想如果不执行优化,则在提供给客户端时 Content-Length 应该是相同的。

这种方法有其他选择吗?我不喜欢我在 pagespeedtest.html 上执行的补充 HTTP 请求,并且该解决方案强烈依赖于 PageSpeed 配置:如果过滤器将被禁用,即使 ModPagespeed 被允许combine_css,我也会得到。$pagespeed_is_active == FALSEOn

必须通过不同的域验证替代解决方案,因为我可以在同一个 .htaccess 中禁止某些域。谢谢你。

4

1 回答 1

2

而不是检查Content-Length,您可以改为查找X-Mod-Pagespeed标题,只要域存在“ModPageSpeed on”指令,它就会为您提供您正在寻找的答案。

除此之外,我认为您没有任何方法可以检查是否从请求中启用了 PageSpeed。PageSpeed 的全部意义在于它作为输出过滤器运行:您生成页面,PageSpeed 将其拾取并进行优化和重写。

于 2012-06-19T17:31:27.100 回答