#.htaccess #http-headers #mod-expires
#.htaccess #http-заголовки #мод-истекает
Вопрос:
Хорошо, я действительно не знал, как задать вопрос, но моя проблема или, по крайней мере, я думаю, что это проблема, выглядит следующим образом:
Блог, над которым я работаю, загружается очень медленно, поэтому я сделал обычные вещи, чтобы ускорить его, такие как добавление gzip и отключение всех подключаемых модулей и т.д., И это не помогло. Итак, я посмотрел на заголовки, отправляемые в Firebug, и заметил, что исходный запрос на страницу занимал целую вечность, в то время как остальные запросы загружались в обычном режиме.
Вот заголовки ответа / запроса для данной страницы:
Заголовки запросов
Host: dev.mydomain.com
User-Agent: Mozilla/5.0... ...Firefox/3.6.17
Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://dev.mydomain.com/blog/2011/05/06/hello-world/
Cookie: Cookie data...
Заголовки ответов
Date: Tue, 07 Jun 2011 17:37:42 GMT
Server: Apache
X-Pingback: http://dev.mydomains.com/blog/xmlrpc.php
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Last-Modified: Tue, 07 Jun 2011 17:37:59 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 4981
Connection: close
Content-Type: text/html; charset=UTF-8
Очевидно, что здесь что-то не так, поскольку кэша нет, соединение установлено на закрытие, а срок действия истекает 30 лет назад.
Вот мой файл .htaccess, в котором я устанавливаю заголовок expires и т.д.
.htaccess .htaccess
# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml xml
AddOutputFilterByType DEFLATE application/rss xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/x-javascript
# Or, compress certain file types by extension:
<Files *.html|*.php>
SetOutputFilter DEFLATE
</Files>
ExpiresActive On
ExpiresDefault A0
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/ico A2592000
ExpiresByType text/css A2592000
ExpiresByType text/javascript A2592000
ExpiresByType application/javascript A2592000
ExpiresByType application/javascript A2592000
FileETag none
AddType text/x-component .htc
AddType image/x-icon .ico
AddHandler application/x-httpd-php .php .html
DirectoryIndex index.php
allow from all
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(. )$ /blog/index.php [L]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
## Ignore CSS, Scripts and Images
RewriteRule !.(xml|swf|js|ico|gif|jpg|png|css|htc)$ index.php [L]
Любая помощь, если она будет высоко оценена.
Кстати, я запускаю WordPress 3.1.1 на PHP 5.2.10 / MySQL 5.1 на CentOS 5.*
Ответ №1:
Я борюсь с теми же проблемами, и одна вещь, которую я обнаружил, заключается в том, что ваш файл .htaccess соответствует разрешениям, предоставленным вашим веб-хостингом. Вы размещаете свой собственный веб-сайт или работаете в компании, предоставляющей веб-хостинг?
Если вы размещаете свой собственный сайт, вам нужно убедиться, что директива «Разрешить переопределение» установлена правильно, чтобы правила .htaccess работали. А еще лучше, настройте файл httpd.config, чтобы он выполнял эту работу и за вас.
Но если вы работаете в веб-хостинговой компании, то вам нужно спросить их о том, какие директивы (те правила .htaccess, которые вы написали) вы можете использовать? Если для параметра Разрешить переопределение вашего веб-хостинга установлено значение NONE, то ваш файл .htaccess будет проигнорирован.
Везде, где я искал, указано, что лучше всего использовать заголовок Expires, установленный в далеком будущем: когда он установлен в прошлом (ноябрь 1981), это заставляет браузер каждый раз извлекать новую страницу / изображение.
Последнее, что я бы посоветовал, это дважды проверить ваши правила .htaccess, вот набор, который может быть полезен вам в качестве отправной точки:
#BEGIN htaccess
#Protect the htaccess file
<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>
#Protect the htaccess file
<Files wp-config.php>
Order Allow,Deny
Deny from all
</Files>
# Disable directory browsing
Options All -Indexes
# Enable the following of symlinks
Options FollowSymLinks
<IfModule mod_headers.c>
# No ETags, No Pragma
Header unset Pragma
Header unset ETag
# Make sure proxies deliver correct content
Header append Vary User-Agent env=!dont-vary
# Ensure proxies deliver compressed content correctly
Header append Vary Accept-Encoding
</IfModule>
# Set up Cache Control headers
ExpiresActive On
# Default - Set http header to expire everything 1 week from last access, set must-revalidate
ExpiresDefault A604800
Header append Cache-Control: "max-age=3600, must-revalidate"
# Apply a customized Cache-Control header to frequently-updated files
<FilesMatch "^(test¦eval).html$">
ExpiresDefault A1
Header unset Cache-Control:
Header append Cache-Control: "no-cache, must-revalidate"
</FilesMatch>
<FilesMatch "^robots.txt$">
ExpiresDefault A7200
</FilesMatch>
ExpiresByType image/x-icon A14515200
# Set up caching on media files for 1 month
<FilesMatch ".(gif|jpg|JPG|jpeg|png|PNG|swf)$">
ExpiresDefault A2419200
</FilesMatch>
# Set up caching on commonly updated files 1 month
<FilesMatch ".(xml|txt|html|js|css)$">
ExpiresDefault A2419200
</FilesMatch>
<FilesMatch ".(ico|gif|jpg|JPG|jpeg|png|PNG|css|js|html?|xml|txt)$">
FileETag None
</FilesMatch>
<IfModule mod_deflate.c>
<FilesMatch ".(js|css|text|html)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>
Надеюсь, это помогло — Удачи!
Лайтфут
Комментарии:
1. Я проверю это в ближайшие пару дней и дам вам знать. Спасибо за помощь.