vcomedia / vco-zf-mediapath
Zend Framework 2 basePath view helper 包装器。
Requires
- php: >=5.5.0
- zendframework/zendframework: >=2.2
This package is not auto-updated.
Last update: 2024-09-28 20:03:27 UTC
README
ZF2 Cachebuster 是一个缓存清除模块,其设计灵感来源于 https://github.com/gordonknoppe/magento-cachebuster。它通过使用HTML5模板社区中概述的最佳实践,使用最佳实践自动清除HTTP缓存(如浏览器缓存、CDN、Varnish等)中的静态资源。
请参阅 "基于文件名的缓存清除" 部分: https://github.com/h5bp/server-configs-apache/blob/2.14.0/dist/.htaccess#L968
概览
该模块通过自动修改Magento为静态文件创建的URI,通过添加文件的时间戳到文件名来实现缓存清除。
示例用法
- 当使用Cloudfront CDN时,自动使缓存失效
- Amazon的Cloudfront CDN可以配置为使用源服务器,但根据其性质,直到缓存时间到期或您使用他们的API发送无效化请求,它不会刷新您的更新文件。
- 不再有浏览器缓存问题(例如:他们:“我请求的那个CSS变化在哪里?” 你:“哦,你刷新了吗?”)
- 添加远期过期头部,这有助于减少对服务器的请求次数,即使没有CDN,您也可能已经体验过浏览器缓存导致浪费时间的情况,而实际上并不是问题。
安装
Composer
- 安装 Composer
- 使用Composer将模块安装到您的应用程序的vendor目录中。在您的
composer.json中添加以下行。
{
"require": {
"vcomedia/vco-zf-mediapath": "dev-master"
}
}
- 执行
composer update - 在您的 ZF2
application.config.php文件中启用模块。
return array( 'modules' => array( 'VcoZfMediaPath' ) );
- 将
vco-zf-logger/config/module.vco-zf-mediapath.local.php.dist文件复制并粘贴到您的config/autoload文件夹中,并使用您的配置设置进行自定义。确保从您的文件中删除.dist。您的module.vco-zf-mediapath.local.php可能看起来如下
<?php /** * VcoZfMediaPath - Zend Framework 2 basePath view helper wrapper. * * @category Module * @package VcoZfMediaPath * @author Vahag Dudukgian (valeeum) * @license https://open-source.org.cn/licenses/MIT The MIT License (MIT) * @link http://github.com/vcomedia/vco-zf-mediapath/ */ namespace VcoZfMediaPath; return array( 'VcoZfMediaPath' => array( 'docRoot' => '/public', 'cdnOptions' => array( 'enabled' => true, 'defaultDomain' => array( 'http' => 'http://cdn.domain.com', 'https' => 'http://cdn.domain.com' ) ), 'cacheBusterOptions' => array( 'enabled' => true, 'basePaths' => array( '/skin/', '/js/', '/scripts/', '/css/', '/stylesheets/', '/media/', '/uploads/', '/images/', '/img/', '/imgs/', '/cache/', '/fonts/' ), 'extensions' => array( 'js', 'css', 'jpg', 'jpeg', 'gif', 'png', 'ttf', 'woff', 'pdf' ) ) ) );
注意:由顶级 'VcoZfLogger' 键返回的配置数组直接传递给 Log 类构造函数,除了邮件传输和mongo凭证注入都是可选的。
mod_rewrite 配置
当使用此模块时,需要启用以下mod_rewrite规则,可能通过.htaccess文件或虚拟主机定义来实现。
<IfModule mod_rewrite.c>
############################################
## rewrite files for magento cachebuster
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpeg|jpg|gif)$ $1.$3 [L]
</IfModule>
nginx 配置
对于nginx,您需要在您的站点定义中添加类似以下的规则。
location ~* (.+)\.(\d+)\.(js|css|png|jpg|jpeg|gif)$ {
try_files $uri $1.$3;
}
使用AWS Cloudfront时考虑重复内容限制和限制到特定静态文件夹(此方法适用于任何CDN)
- 创建2个源
- 一个源将是 "domain.com"
- 另一个源将是一个自定义错误页面,例如 "domain.com/403.html" 或您想要处理的任何方式。
- 为您拥有的每个静态文件文件夹创建缓存行为。例如
- 对于 "/css",您将创建一个缓存行为路径模式 "css/*"
- 对于 "/js",您将创建一个缓存行为路径模式 "js/*"
- 等等。
- 对于这些缓存行为中的每一个,您都希望确保指定的源是 "domain.com"。
- 这样,对 "http://cdn.domain.com/css/" 等的任何请求将类似于对 "http://domain.com/css/" 的请求
- 然后,对于默认缓存行为(*),您可以将它指向您创建的第二个来源。按照第1步中的示例,该来源将是 "domain.com/403.html"。
所以,本质上,上述操作的方式是:任何对 http://cdn.domain.com/css/,/js/ 等;的请求都将适当指向您的来源。如果他们试图访问 "http://cdn.domain.com/notspecified/",这将仅匹配默认缓存行为(*),然后会将他们指向您创建的403页面。这样,应该确保任何爬取 cdn.domain.com 的内容都只能看到您的静态内容,而看不到其他内容,除非在您的缓存行为路径模式中指定。
这至少会将重复内容问题限制在静态文件上。
许可
Apache License,版本 2.0 许可