CakePHP и .htaccess кеширование активов - PullRequest
3 голосов
/ 21 октября 2011

Я все еще довольно новичок в CakePHP, и мне трудно понять, как оптимизировать кэширование ресурсов.

Вернемся, когда я все еще программировал на чистом PHP, это то, что я делал бы с моими файлами .htaccess и header.inc.php:

.htaccess:

<IfModule mod_rewrite.c>
    # Turn the rewrite engine on

    RewriteEngine On

    # The following rewrite rule makes it so that if a URL such as
    # http://example.com/css/style.1291314030.css is requested
    # then it will actually load the following URL instead (if it exists):
    #
    # http://example.com/css/style.css
    #
    # This is to increase the efficiency of caching. See http://bit.ly/9ZMVL for
    # more information.

    RewriteCond %{DOCUMENT_ROOT}/$1/$2.$3 -f
    RewriteRule ^(css|js)/(.*)\.[0-9]+\.(.*)$ /$1/$2.$3 [L]
</IfModule>

<IfModule mod_expires.c>
    # Optimize caching - see http://yhoo.it/ahEkX9 for more information.

    ExpiresActive On

    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/x-icon "access plus 1 month"
    ExpiresByType text/css "access plus 1 year"
    ExpiresByType application/javascript "access plus 1 year"
    ExpiresByType application/x-javascript "access plus 1 year"
</IfModule>

header.inc.php:

foreach ($css_to_use as $current_css)
{
    echo "\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"css/$current_css." . filemtime("{$_SERVER['DOCUMENT_ROOT']}/css/$current_css.css") . ".css\">";
}

Эта установка работала довольно хорошо, потому что когда я работал на клиентских веб-сайтах, мне никогда не приходилось указывать клиенту выполнить жесткое обновление или очистить его кэш; это было полностью автоматически и все еще имело преимущества кэширования.

Я вижу, что в файле "app / config / core.php" CakePHP можно использовать следующую строку кода:

Configure::write('Asset.timestamp', 'force');

Тем не менее, URL-адреса выглядят так:

<link rel="stylesheet" type="text/css" href="/css/style.css?1291314030" />

Так что это не работает так, как мне бы хотелось. Каков наилучший способ кэширования ресурсов?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 22 октября 2011

Добавление строки запроса фактически аналогично изменению URL-адреса, браузеры будут считать его другим и перезагружать ресурс, будь то CSS, изображения или что-то еще.

1 голос
/ 18 июня 2016

Шаг 1: Измените свой webroot .htacess на

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"
</IfModule>
## EXPIRES CACHING ##

Шаг 2: срок действия sudo a2enmod истекает

Шаг 3: sudo service apache2 restart

Шаг 4:Пей пиво, жизнь удалась.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...