我想加快我的网站速度。我想知道我已经正确地完成了语法。
<IfModule mod_expires.c>
Header unset Pragma
FileETag None
Header unset ETag
ExpiresActive On
ExpiresDefault "access plus 1 year"
##### DYNAMIC PAGES
<FilesMatch "\\.(ast|php)$">
ExpiresDefault A7200
Header set Cache-Control "public, max-age=3600, must-revalidate"
</FilesMatch>
##### STATIC FILES
<FilesMatch "(?i)^.*\.(ico|png|gif|jpg)$">
Header unset Last-Modified
Header set Expires "Fri, 21 Dec 2012 00:00:00 GMT"
Header set Cache-Control "public, no-transform"
</FilesMatch>
<FilesMatch "\\.(css|js|xml)$">
Header set Cache-Control "public, max-age=604800, must-revalidate"
</FilesMatch>
</IfModule>
答案 0 :(得分:0)
不要缓存asp或php或任何动态页面!这将导致不可预测的结果。
这是一个例子,假设你有一个名为catalog.php的页面,它使产品目录具有最高价格和库存可用性。由于您已将其设置为在浏览器上缓存结果一小时,因此它将在浏览器上显示一小时的陈旧数据!
动态页面永远不应该像这样批量缓存。您需要根据从页面返回数据的新鲜程度,在页面上放置单独的缓存逻辑。
对于静态页面,虽然你可以做这样的批发到期。但是,请注意,如果您将css和js文件设置为在一年后过期,则今天访问您网站的用户将无法从网络服务器获取最近的js和css数天或数月。如果对脚本或样式进行更改,除非使用某些唯一的查询字符串手动更改文件的URL,否则它们不会看到更改。
我在这里讨论了一种仅适用于ASP.NET的方法。但它会告诉你有关注意事项和注意事项。
http://omaralzabir.com/automatic-javascript-css-versioning-to-refresh-browser-cache/
您还可以阅读我的7条提示,以充分利用缓存,解释所有这些方法以及每种方法的优缺点:
http://omaralzabir.com/making_best_use_of_cache_for_high_performance_website/
如果有帮助,请告诉我。
答案 1 :(得分:0)
我知道这个问题是从2011年开始的,但就在那时,Pragma已经过时了。我认为停止使用它是安全的。
我们很少需要设置'公开'或必须重新验证,除非您尝试支持真正的旧浏览器和代理,例如IEv4之前的内容。
如果你要缓存你的php,你仍然需要在你的PHP代码中做一些工作。
为图像和内容取消设置Last-Modified实际上会导致这些文件的“永不缓存”情况,直到静态(当时)未来日期的预定日期。我认为您希望在将来X天缓存静态文件,而不是在上次修改时取消设置。
您的htaccess文件可以更简单。借用some snippets from H5BP我们可以将它现代化成为:
## set some mime types to their proper types
AddType application/javascript js jsonp
AddType application/json json
AddType application/xml rss atom xml rdf
AddType image/x-icon ico
<IfModule mod_deflate.c>
# Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
</IfModule>
</IfModule>
# Compress all output labeled with one of the following MIME-types
# (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
# and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines as
# `AddOutputFilterByType` is still in the core directives)
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE application/atom+xml \
application/javascript \
application/json \
application/rss+xml \
application/vnd.ms-fontobject \
application/x-font-ttf \
application/xhtml+xml \
application/xml \
font/opentype \
image/svg+xml \
image/x-icon \
text/css \
text/html \
text/plain \
text/x-component \
text/xml
</IfModule>
</IfModule>
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 1 month"
# Your document html
ExpiresByType text/html "access plus 0 seconds"
# Data
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
# Feed
ExpiresByType application/atom+xml "access plus 1 hour"
ExpiresByType application/rss+xml "access plus 1 hour"
# Favicon (cannot be renamed)
ExpiresByType image/x-icon "access plus 1 week"
# images
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
# CSS and JavaScript
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
</IfModule>
# ----------------------------------------------------------------------
# Prevent mobile network providers from modifying your site
# ----------------------------------------------------------------------
# The following header prevents modification of your code over 3G on some
# European providers.
# This is the official 'bypass' suggested by O2 in the UK.
<IfModule mod_headers.c>
Header set Cache-Control "no-transform"
</IfModule>
# ----------------------------------------------------------------------
# ETag removal
# ----------------------------------------------------------------------
# FileETag None is not enough for every server.
<IfModule mod_headers.c>
Header unset ETag
</IfModule>
# Since we're sending far-future expires, we don't need ETags for
# static content.
# developer.yahoo.com/performance/rules.html#etags
FileETag None
答案 2 :(得分:0)
Google有一个网站可以帮助您分析您的网站。此工具提供了许多工具和有用的分析。