我安装了 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 软件而不是开发它,因此您应该认为程序员已经想到了这一点。它也会在更新时更改回来。因此,当您为静态内容设置标头时,您可能已经完成了缓存控制。