为通过查询字符串检索的内容设置过期标头

为通过查询字符串检索的内容设置过期标头

我安装了 MediaWiki,并一直使用 Google 的 PageSpeed 工具作为指南优化各个方面,到目前为止我已经做出了很多改进。

有一件事我不是能够做的是使用我的 .htaccess 文件为以下资源设置 Expires Header:

http://example.com/mywiki/load.php?debug=false&lang=en-gb&modules=startup&only=scripts&skin=vector&*

它没有像 .css 或 .js 这样的常规文件扩展名。

我是否在 .htaccess 文件中为这些类型的文件设置了 Expires Headers?

答案1

简短回答:为这些资源设置 Expire Header 可能不是一个好主意。

解释:

您需要了解有关 URL 格式及其分隔符://@:?的基础知识#

scheme://[user:password@]domain:port/path?query_string#fragment_id

在您的 URL 中:

  • 方案:http
  • 不存在用户名和密码。
  • 领域:example.com
  • 端口不存在,默认为 HTTP 端口80
  • 小路/mywiki/load.php
  • 请求参数debug=false&lang=en-gb&modules=startup&only=scripts&skin=vector&*
  • 片段 ID 不存在。

这里的主要问题是您将路径和查询字符串混在一起了。您的文件位置是,/mywiki/load.php并且它具有正常的文件扩展名.php。查询字符串会发送数据供此 PHP 脚本处理:以 & 符号分隔的名称/值对。

现在我们知道我们正在处理 PHP 脚本,我们必须意识到 Apache 现在提供动态内容:内容会发生变化。通常,为此类内容设置缓存控制不是一个好主意。如果我们愿意,这是可以的。我们可以通过文件扩展名进行设置,.htaccess或者 PHP 脚本本身也可以设置缓存标头,例如

header("Expires: " . gmdate("D, d M Y H:i:s", time() + 3600) . " GMT");

如果 PHP 脚本提供图像、下载或其他静态内容,那么这将是一个选项。但是,由于您只是在使用 PHP 软件而不是开发它,因此您应该认为程序员已经想到了这一点。它也会在更新时更改回来。因此,当您为静态内容设置标头时,您可能已经完成了缓存控制。

相关内容