[apache] Apache httpd (MAMP)에서 http 파일 캐싱을 방지하는 방법

MAMP에서 단일 페이지 Javascript 응용 프로그램을 개발 중입니다. 내 JavaScript 및 HTML 템플릿 파일이 요청간에 캐시됩니다.

http 파일 캐싱을 방지하고 싶다고 MAMP에 표시하는 간단한 방법이 있습니까? 아마도와 .htaccess파일? .htaccessMac에서 MAMP 용 가상 호스트를 어디에 배치 하거나 수정합니까?



답변

이것을 시도? 모두에서 작동합니다 .htaccess, httpd.conf하고의 VirtualHost(보통 배치에 httpd-vhosts.conf당신이에서를 포함 한 경우의 httpd.conf)

<filesMatch "\.(html|htm|js|css)$">
  FileETag None
  <ifModule mod_headers.c>
     Header unset ETag
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
     Header set Pragma "no-cache"
     Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
  </ifModule>
</filesMatch>

100 % 파일 캐시 방지

이는 프록시 및 클라이언트가 광고를 캐싱하는 것을 방지하기 위해 Google 광고가 Cache-Control : private, x-gzip-ok = “”> 헤더를 사용하는 방식과 유사합니다.

에서 http://www.askapache.com/htaccess/using-http-headers-with-htaccess.html

또한 선택적으로 확장자가 아닌 다른 확장자를 사용하는 경우 검색중인 템플리트 파일의 확장자를 추가하십시오 .html.


답변

여기 예제를 기반으로 : http://drupal.org/node/550488

다음은 아마 .htaccess에서 작동합니다.

 <IfModule mod_expires.c>
   # Enable expirations.
   ExpiresActive On

   # Cache all files for 2 weeks after access (A).
   ExpiresDefault A1209600

  <FilesMatch (\.js|\.html)$>
     ExpiresActive Off
  </FilesMatch>
 </IfModule>


답변

같은 문제가 있었지만 여기서 좋은 해결책을 찾았
습니다 .MAMP에서 PHP 5.5.3의 캐싱 중지

기본적으로 php.ini 파일을 찾아 OPCache 라인을 주석 처리하십시오. 이 대안 적 답변이 다른 사람들에게도 도움이되기를 바랍니다.


답변

mod_expires없으면 파일에 만료 헤더를 설정하기가 더 어려워집니다. 생성 된 내용에 대해 mod_expires 작업을 수행하여 응답에 기본 헤더를 설정할 수 있습니다.

<?php header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 3600)); ?>

(에서 가져온 : @brianegge의 스택 오버플로 답변 , mod_expires 솔루션도 설명되어 있습니다)

이제는 자바 스크립트 파일과 같은 정적 파일 에서는 작동하지 않습니다 . 정적 파일의 경우 브라우저와 소스 파일 사이에는 아파치 (만료 모듈 없음)가 있습니다. 브라우저에서 수행되는 자바 스크립트 파일의 캐싱을 방지하기 위해 js URL의 끝에 임의의 토큰 을 사용할 수 있습니다 ?rd=45642111. URL은 다음과 같습니다.

<script type="texte/javascript" src="my/url/myjs.js?rd=4221159546">

페이지의이 URL이 PHP 파일에 의해 생성되면 PHP로 임의의 부분을 추가 할 수 있습니다. 랜덤 쿼리 문자열 파라미터를 단순히 추가하여 URL을 랜덤 화하는이 방법은 예를 들어 ajax jQuery 요청의 캐시없는 설정의 기본 사항입니다. 브라우저는 다른 쿼리 문자열을 가진 2 개의 URL이 동일한 것으로 간주하지 않으며 캐시 된 버전을 사용하지 않습니다.

편집하다

mod_headers 테스트해야합니다 . mod_headers가있는 경우 헤더 키워드를 사용하여 Expires 헤더를 직접 설정할 수 있습니다 .


답변

<FilesMatch "\.(js|css)$">
  ExpiresActive On
  ExpiresDefault A1
  Header append Cache-Control must-revalidate
</FilesMatch>


답변