2015-03-10 4 views
1

У меня есть сайт под кодом .htaccess. И файл /static/js/main.js на сервере не тот, который подается при доступе.Сервер, предоставляющий старую версию файла

Я сначала подумал, что это проблема кэширования браузера, но после того, как я отдал все, что было то же самое, и он уверен, что это не проблема, кэш браузера, потому что даже:

wget www.website.com/static/js/main.js загружает неправильный старый файл.

Что может быть неправильным? Как это решить?

PS: Когда я заметил, что поданный файл был неправильным старым вчера, я попытался удалить htaccess для обновления, но это было то же самое, и я снова поместил его. Теперь, каждый файл на веб-сайтах требуется пароль, за исключением того, что старый /static/js/main.js ...

+0

Вы уверены, что находитесь в правильном пути при редактировании файла? похоже, что вы отредактировали файл в другой папке –

+0

Да, я уверен, я проверил сотни раз через FTP. – lapin

+0

У вас есть система кэширования на вашем сервере? Или между вами и вашим сервером? Как облако? –

ответ

0

Ok вы могли бы попробовать это:

Во-первых, мы используем следующее правило перезаписи в .htaccess:

RewriteEngine on 
RewriteRule ^(.*)\.[\d]{10}\.(css|js)$ $1.$2 [L] 

Теперь мы пишем следующий PHP функции:

/** 
* Given a file, i.e. /css/base.css, replaces it with a string containing the 
* file's mtime, i.e. /css/base.1221534296.css. 
* 
* @param $file The file to be loaded. Must be an absolute path (i.e. 
*    starting with slash). 
*/ 
function auto_version($file) 
{ 
    if(strpos($file, '/') !== 0 || !file_exists($_SERVER['DOCUMENT_ROOT'] . $file)) 
    return $file; 

    $mtime = filemtime($_SERVER['DOCUMENT_ROOT'] . $file); 
    return preg_replace('{\\.([^./]+)$}', ".$mtime.\$1", $file); 
} 

Теперь, где бы вы включили ваш CSS, изменить его от этого:

<link rel="stylesheet" href="/css/base.css" type="text/css" /> 

Для этого:

<link rel="stylesheet" href="<?php echo auto_version('/css/base.css'); ?>" type="text/css" /> 

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

Это также может работать с изображениями, значками и JavaScript. В принципе все, что не динамически генерируется.

+0

Да, это решит проблему. Кэш для файла был 1 год, теперь обновлен htaccess до 0 секунд, однако я полагаю, что rooter, обслуживающий файл, по-прежнему считает, что он должен обслуживать main.js в течение 1 года. Как мы можем сбросить кешированный файл rooter/dns, который они обслуживают, когда запрашивается «main.js»? – lapin

+0

Прочтите эту статью http://www.websiteoptimization.com/speed/tweak/cache/ Это может помочь вам, –

Смежные вопросы