7分钟阅读时间 (1438字)

神奇的 .htaccess 文件!

你知道吗?你只需使用 .htaccess 就可以显著减小网站大小并提高速度。资源的自动压缩、ETags 和过期头等经常被忽视的项目可以极大地提高你网站的性能。本文将试图用非技术性的语言解释它们是什么,它们的作用以及如何在你的网站上使用它们。

你知道吗?你只需使用 .htaccess 就可以显著 减小 网站大小并 提高 速度。资源的自动压缩、ETags 和过期头等经常被忽视的项目可以极大地提高你网站的性能。本文将试图用非技术性的语言解释它们是什么,它们的作用以及如何在你的网站上使用它们。为了说明好处,我在两个流行的 Joomla 模板俱乐部模板和核心 Joomla 模板 Atomic 上进行了几个测试,并使用来自 GTMetrix 的一个很酷的工具来测量结果。三个安装都加载了提供商的样本数据。进行了几次测试来量化使用 htaccess 提高网站性能以及安全性的优势。模板俱乐部演示加载的样本数据和图片比核心 Joomla 样本多得多,并且将 Atomic 与商业模板进行比较并不完全公平,然而,结果仍然非常有趣。

  1. "之前" 测试是我们的对照组,用于衡量性能"开箱即用",只对每个演示进行了两项小的调整:将核心 Joomla 的 htaccess.txt 文件重命名为 .htaccess,并将全局配置中的“使用 URL 重写”设置为“是”。全面的结果相当差。
  2. “AFTER” 结果显示页面大小、加载时间和网站速度有了显著提升。这次测试是在将核心Joomla .htaccess文件替换为更大的文件之后进行的,字面意义上和比喻意义上都是如此。原始文件为4KB,Master .htaccess文件为24KB,包含注释。没有开启任何扩展、插件、gzip、缓存或压缩。结果显示,Atomic的页面速度等级提高了46%,Voxel提高了34%,Steam提高了25%。
  3. “W/GZIP”测试是在开启Joomla内置的gzip压缩和全局管理员中的缓存,以及在插件管理器中开启系统缓存后进行的。几乎没有可测量的变化,我对这个结果感到非常惊讶。
  4. 最后的测试“JCH”是在安装扩展插件JCH Optimize后进行的,该插件略微提升了模板俱乐部页面,但使我们的Atomic YSlow等级达到了“A”。了不起!

 

 

site-performance-test

 

 所有测试都是在同一台虚拟专用服务器上进行的,每个测试之间相差一分钟。

是如何做到的? 这就是本文剩下的部分变得有些复杂的地方。您必须阅读所有的注释并根据自己的需求做出决定。小心行事,因为从这里开始,就有可能遇到困难!

有很多现有的文章讨论了使用htaccess和Akeeba Backup的一个优秀扩展Admin Tools进行网站安全的问题,因此我将主要讨论性能。以下代码中有许多注释解释了每个项目可以为您的网站做什么。这个文件的主要功能是加快您的网站速度,包括Etags(实体标签)、Expires Headers(过期头)和资源的自动压缩。

  1. ETag 告诉浏览器缓存一个图像是它之前见过的,并通过提供时间戳和文件大小,它不需要重新加载。
  2. Expires headers 与ETag类似,但可以为每种文件类型设置不同的过期日期。我们在告诉浏览器,这个文件应该每隔几天/周/月刷新一次。
  3. 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或Chrome元素检查器等工具查看正在报告的错误。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文件中代码的良好理解,否则您肯定会暂时破坏(暂时地)您的网站。请在演示安装上尝试此方法,并且记住,孩子们,总是,总是要备份。

资源

鸣谢

  • Brian Teeman @brianteeman
  • Ken Crowder (ChiefGoFor)
  • Radek Suski @radeksu
  • Fotis Evangelou @fevangelou
  • Jon Neubauer @219jondn
  • Nicholas K. Dionysopoulos @akeebabackup
  • Jon Brown @jsbrwn
  • Jeff Star @perishable
  • Cindy Montano @montanodesigns
  • 等等...

发表在 Joomla 社区杂志上的某些文章代表了作者在特定主题上的个人观点或经验,可能并不与 Joomla 项目的官方立场一致

0
领导力亮点 - 2012年6月
Joomla 扩展终极营销指南...
 

评论

已经注册? 登录这里
尚未发表评论。成为第一个发表评论的人

通过接受,您将访问 https://magazine.joomla.net.cn/ 外部第三方提供的服务