.htaccess 文件大显神威!
你知道吗?仅使用 .htaccess 文件就可以大幅度减少网站的大小并提高其速度吗?资源的自动压缩、ETags 和 Expires Headers 这些经常被忽视的项目可以显著提高网站的性能。本文将尝试用非技术术语解释它们是什么、它们的作用以及如何在你的网站上使用它们。
你知道吗?仅使用 .htaccess 文件就可以大幅度减少网站的大小并增加其速度吗?资源的自动压缩、ETags 和 Expires Headers 这些经常被忽视的项目可以显著提高网站的性能。本文将尝试用非技术术语解释它们是什么、它们的作用以及如何在你的网站上使用它们。为了说明好处,我使用两个流行的 Joomla 模板俱乐部模板和核心 Joomla 模板 Atomic 进行了几个测试,并使用来自 GTMetrix 的一个很酷的工具测量了结果。每个安装都加载了供应商的示例数据。进行了多次测试,以量化使用 .htaccess 提高网站性能以及安全性的优势。模板俱乐部演示加载的示例数据和图像比核心 Joomla 示例多得多,将 Atomic 与商业模板进行比较并不是“苹果与苹果”,然而,结果仍然非常有趣。
- “之前”测试是我们的对照组,用于衡量“开箱即用”的性能,并仅对每个演示进行了两项微小的调整:将核心 Joomla 的 htaccess.txt 文件重命名为 .htaccess,并在全局配置中将“使用 URL 转换”设置为“是”。全面的结果相当糟糕。
- “之后”的结果显示了页面大小、加载时间和网站速度的巨大改进。这项测试是在用更重的文件替换核心 Joomla .htaccess 文件后进行的,字面上和比喻上都如此。原始文件大小为 4KB,主 .htaccess 文件大小为 24KB(包括注释)。没有开启任何扩展、插件、gzip、缓存或压缩。结果显示 Atomic 的页面速度评分提高了 46%,Voxel 提高了 34%,Steam 提高了 25%。
- 在开启Joomla内置的gzip压缩和全局管理员中的缓存,以及插件管理器中的系统缓存后,运行了名为“W/GZIP”的测试。几乎没有可测量的变化,我对这个结果感到非常惊讶。
- 最后的测试“JCH”是安装扩展插件JCH Optimize的结果,它略微改善了模板俱乐部页面,但使我们的Atomic YSlow评分达到了“A”。太棒了!
所有测试都在同一个虚拟私有服务器上运行,时间相差不到一分钟。
如何操作? 这就是这篇文章的后半部分变得有些复杂的地方。你必须阅读所有的注释,并根据你的具体需求做出决定。谨慎行事,超出这个范围,就有龙出没!
有许多现有的文章讨论使用htaccess和Akeeba Backup的扩展插件Admin Tools来提高网站安全性,因此我将主要讨论性能。以下代码中有许多注释解释了每个项目可以为你的网站做什么。这个文件的主要功能是加快你的网站速度,包括ETag(实体标签)、Expires Headers(过期头)和资源自动压缩。
- ETag 告诉浏览器缓存一个图像是它之前见过的,它不需要通过提供时间戳和文件大小来重新加载它。
- Expires headers 与ETag类似,但可以为每种文件类型设置不同的过期日期。我们告诉浏览器这个文件应该每隔几天/周/月刷新一次。
- AddOutputFilterByType DEFLATE "压缩"你的编译HTML文件的源代码,通过删除不必要的换行符和空格。YooTheme Steam模板从383行代码减少到只有5行
########## Begin - ETag Optimization ## This rule will create an ETag for files based only on the modification ## timestamp and their size. This works wonders if you are using rsync'ed ## servers, where the inode number of identical files differs. ## Note: It may cause problems on your server and you may need to remove it FileETag MTime Size ########## End - ETag Optimization ########## Begin - Automatic compression of resources # Compress text, html, javascript, css, xml, kudos to Komra.de # May kill access to your site for old versions of Internet Explorer # The server needs to be compiled with mod_deflate otherwise it will send HTTP 500 Error. # mod_deflate is not available on Apache 1.x series. Can only be used with Apache 2.x server. # AddOutputFilterByType is now deprecated by Apache. Use mod_filter in the future. AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript ########## Begin - Optimal default expiration time ## Note: this might cause problems and you might have to comment it out by ## placing a hash in front of this section's lines# Enable expiration control ExpiresActive On # Default expiration: 1 hour after request ExpiresDefault "now plus 1 hour" # CSS and JS expiration: 1 week after request ExpiresByType text/css "now plus 1 week" ExpiresByType application/javascript "now plus 1 week" ExpiresByType application/x-javascript "now plus 1 week" # Image files expiration: 1 month after request ExpiresByType image/bmp "now plus 1 month" ExpiresByType image/gif "now plus 1 month" ExpiresByType image/jpeg "now plus 1 month" ExpiresByType image/jp2 "now plus 1 month" ExpiresByType image/pipeg "now plus 1 month" ExpiresByType image/png "now plus 1 month" ExpiresByType image/svg+xml "now plus 1 month" ExpiresByType image/tiff "now plus 1 month" ExpiresByType image/vnd.microsoft.icon "now plus 1 month" ExpiresByType image/x-icon "now plus 1 month" ExpiresByType image/ico "now plus 1 month" ExpiresByType image/icon "now plus 1 month" ExpiresByType text/ico "now plus 1 month" ExpiresByType application/ico "now plus 1 month" ExpiresByType image/vnd.wap.wbmp "now plus 1 month" ExpiresByType application/vnd.wap.wbxml "now plus 1 month" ExpiresByType application/smil "now plus 1 month" # Audio files expiration: 1 month after request ExpiresByType audio/basic "now plus 1 month" ExpiresByType audio/mid "now plus 1 month" ExpiresByType audio/midi "now plus 1 month" ExpiresByType audio/mpeg "now plus 1 month" ExpiresByType audio/x-aiff "now plus 1 month" ExpiresByType audio/x-mpegurl "now plus 1 month" ExpiresByType audio/x-pn-realaudio "now plus 1 month" ExpiresByType audio/x-wav "now plus 1 month" # Movie files expiration: 1 month after request ExpiresByType application/x-shockwave-flash "now plus 1 month" ExpiresByType x-world/x-vrml "now plus 1 month" ExpiresByType video/x-msvideo "now plus 1 month" ExpiresByType video/mpeg "now plus 1 month" ExpiresByType video/mp4 "now plus 1 month" ExpiresByType video/quicktime "now plus 1 month" ExpiresByType video/x-la-asf "now plus 1 month" ExpiresByType video/x-ms-asf "now plus 1 month" ########## End - Optimal expiration time
技巧和窍门
并非所有服务器都一样。默认服务器设置因主机而异,这意味着这个htaccess文件中的某些设置可能会引发500内部服务器错误。确定错误确切原因的最佳方法是删除代码的一部分,上传,然后测试网站。如果错误仍然存在,替换第一部分,然后删除另一部分,然后重复此步骤。记录下你已测试的行号,直到找到罪魁祸首是很方便的。
如果你发现CSS或JavaScript文件表现不正常,请使用Firebug或Chromes元素检查器等工具查看报告的错误。403禁止错误通常意味着你已经阻止了对文件夹或文件类型的访问。在错误中查找文件的路径,并创建一个RewriteRule以允许访问该文件夹,如下面的示例所示。我的经验是,RocketTheme模板需要访问“fonts”文件夹。YooTheme模板和/或Widgetkit/Zoo需要访问它们各自的缓存文件夹。
RewriteRule ^templates\/your_template_folder/ - [L] ## I found this necessary for @fontface fonts RewriteRule ^templates\/your_template_folder\/fonts/ - [L] ##Yoo Themes Widgetkit and Zoo will not display css styles or images correctly if the cache folder access is blocked RewriteRule ^cache\/widgetkit/ - [L] RewriteRule ^cache\/com_zoo/ - [L] RewriteRule ^cache\/com_templates/ - [L] RewriteRule ^cache\/template/ - [L] RewriteRule ^cache\/plg_jch_optimize/ - [L]
Jeff Star来自Perishable Press的一篇精彩的名为Stupid htaccess Tricks的文章提供了关于代码和功能的广泛文档。
免责声明
这绝对不是一篇全面的教程,而且不应该在没有首先根据你的网站和服务器自定义代码的情况下,直接将标准文件应用到你的Joomla网站上。需要具备对htaccess文件中代码的良好理解,否则你很可能会暂时破坏你的网站。首先在演示安装上尝试,孩子们,永远,永远都要先备份。
资源
鸣谢
- 布莱恩·蒂曼 @brianteeman
- 肯·克罗德(ChiefGoFor)
- 拉德克·苏斯基 @radeksu
- 福蒂斯·埃万杰洛斯 @fevangelou
- 乔恩·纽鲍尔 @219jondn
- 尼古拉斯·K·狄奥尼索普洛斯 @akeebabackup
- 乔恩·布朗 @jsbrwn
- 杰夫·斯塔 @perishable
- 辛迪·蒙特诺 @montanodesigns
- 等等...
在Joomla社区杂志上发表的一些文章代表了作者对特定主题的个人观点或经验,可能不代表Joomla项目的官方立场。
通过接受,您将访问https://magazine.joomla.net.cn/外部第三方提供的服务
评论