অ্যাপাচি httpd (এমএএমপি) এ কীভাবে http ফাইল ক্যাচিং প্রতিরোধ করবেন


139

আমি এমএএমপিতে একটি একক পৃষ্ঠা জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন বিকাশ করছি। আমার জাভাস্ক্রিপ্ট এবং এইচটিএমএল টেমপ্লেট ফাইলগুলি অনুরোধগুলির মধ্যে ক্যাশে হচ্ছে।

এমএএমপিতে ইঙ্গিত করার কোনও সহজ উপায় আছে যা আমি HTTP ফাইল ক্যাচিং প্রতিরোধ করতে চাই? সম্ভবত একটি .htaccessফাইল সঙ্গে ? আমি .htaccessম্যাকের এমএএমপি-র জন্য ভার্চুয়াল হোস্টটি কোথায় রাখি বা সংশোধন করব?

উত্তর:


318

এই চেষ্টা করেছেন? উভয় কাজ করা উচিত .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% ফাইলগুলি ক্যাশে হওয়া থেকে বিরত রাখুন

প্রক্সি এবং ক্লায়েন্টদের দ্বারা বিজ্ঞাপনগুলির ক্যাচিং প্রতিরোধ করতে গুগল বিজ্ঞাপনগুলি শিরোনাম ক্যাশে-নিয়ন্ত্রণ: ব্যক্তিগত, এক্স-জিজিপ-ওকে = ""> নিয়োগ করে to

Http://www.askapache.com/htaccess/using-http-headers-with-htaccess.html থেকে

এবং theচ্ছিকভাবে আপনি যে টেম্পলেট ফাইলগুলি উদ্ধার .htmlকরছেন সেগুলির জন্য এক্সটেনশন যুক্ত করুন যদি আপনি সেগুলি ব্যতীত অন্য কোনও এক্সটেনশন ব্যবহার করছেন ।


2
ধন্যবাদ, এটি একটি .htaccess ফাইলে খুব ভাল কাজ করে। আমি যখন শিরোনামগুলি পরিদর্শন করি তখন আমার ক্যাশে নিয়ন্ত্রণ বিকল্পগুলি দেখতে পাওয়া যায় এবং আমার ফাইলগুলি অনুরোধের মধ্যে 304 এর পরিবর্তে http 200 দিয়ে দেখানো হয়, আমার যা প্রয়োজন তা ঠিক।
dmck

2
LoadModule কমান্ডটি যুক্ত করতে ভুলবেন না। LoadModule headers_module lib/modules/mod_headers.so
স্পেনহোয়েট

আমি কি একের পর এক এক্সটেনশন সংজ্ঞায়নের পরিবর্তে সমস্ত ফাইলের ধরণের শিরোনাম প্রয়োগ করতে পারি?
থারিক নগ্রোহোটোমো

1
@ থারিকুনগ্রোহটোমো হ্যাঁ এটি সম্ভব! এটি একটি নিয়মিত প্রকাশ, আপনি চেষ্টা করতে পারেন <filesMatch "\.+">বা<filesMatch ^>
চার্লি রুডেনস্টল

আমি এমএএমপি ব্যবহার করছি না তবে ওয়েব সার্ভারে অ্যাপাচি ব্যবহার করছি। আমাকে "সুডো এ 2 ইনমোড হেডার" এবং "সুডো এ 2 এনমোডের মেয়াদ শেষ হয়ে গেছে" টাইপ করে আমার অ্যাপাচি ইনস্টলেশনের মডিউলগুলি মেয়াদোত্তীর্ণ করতে সক্ষম হয়েছিল এবং তারপরে সুডো পরিষেবা অ্যাপাচি 2 পুনঃসূচনা করতে হবে। লোডমডিউল এবং ইফমোডুল কমান্ড / ট্যাগগুলি প্রয়োজনীয় ছিল না - কেবল উপরের বন্ধনীযুক্ত ifModule ট্যাগ অংশগুলি বাদ দিন তবে তাদের মধ্যে শিরোনাম সেটিংস প্রবেশ করুন। -
andruo11

5

এখানে উদাহরণের ভিত্তিতে: 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>

দুর্ভাগ্যক্রমে এটি কাজ করে না যখন আমি আমার প্রকল্প ডিরেক্টরিতে একটি htaccess ফাইল রাখি। আমি নিশ্চিত না যে মোড_এক্সপায়ারগুলি সক্রিয় আছে কিনা।
dmck

5
@dmck: অপসারণ <IfModule mod_expires.c>এবং </IfModule>.. অধ্যায় mod_expires সক্রিয় করা হয় না তাহলে, সেইসব নির্দেশনা পরিবর্তে একটি ত্রুটি শান্তভাবে উপেক্ষা করা হচ্ছে পাবেন।
স্টেনি

একটি প্রকল্প ডিরেক্টরিতে এখানে যে কোনও সামান্য সিনট্যাক্স ত্রুটি 500 ত্রুটির কারণ হতে পারে।
এসডসোলার

3

আমার একই সমস্যা ছিল, তবে আমি এখানে একটি ভাল সমাধান পেয়েছি: এমএএমপিতে পিএইচপি 5.5.3 এর জন্য ক্যাচিং বন্ধ করুন

মূলত php.ini ফাইলটি সন্ধান করুন এবং ওপিসিচি লাইনগুলি সম্পর্কে মন্তব্য করুন। আমি আশা করি এই বিকল্প উত্তরটি অন্যদেরকেও সহায়তা করে।


3
এটি সার্ভারের দিকে পিএইচপি ক্যাশিং সম্পর্কিত, ওরফে ওপিসিচ। প্রশ্নটি এইচটিটিপি-র মাধ্যমে অনুরোধ করা ব্রাউজারের দ্বারা ক্যাশে হওয়া ফাইলগুলি সম্পর্কে।
ফ্লাউন

2

Mod_expires ব্যতীত আপনার ফাইলগুলিতে মেয়াদোত্তীর্ণ শিরোনাম সেট করা আরও শক্ত হবে। উত্পাদিত যে কোনও কিছুর জন্য আপনি অবশ্যই উত্তরটির উপর কিছু ডিফল্ট শিরোলেখ সেট করতে পারেন, মোড_একপায়ারগুলির মতো কাজ করে:

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

(এখান থেকে নেওয়া: @ ব্রায়ানজি থেকে স্ট্যাক ওভারফ্লো উত্তর , যেখানে মোড_এক্সপায়ার সমাধানটিও ব্যাখ্যা করা হয়েছে)

এখন এটি আপনার জাভাস্ক্রিপ্ট ফাইলের মতো স্থিতিশীল ফাইলগুলির জন্য কাজ করবে না । স্থির ফাইল হিসাবে ব্রাউজার এবং উত্স ফাইলের মধ্যে কেবল অ্যাপাচি (কোনও মেয়াদ ছাড়াই) রয়েছে। আপনার ব্রাউজারে করা জাভাস্ক্রিপ্ট ফাইলগুলির ক্যাচিং প্রতিরোধ করতে, আপনি জেএসএল ইউআরএল শেষে একটি এলোমেলো টোকেন ব্যবহার করতে পারেন ?rd=45642111, এর মতো কিছু , যাতে url দেখতে দেখতে:

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

পৃষ্ঠার এই url টি যদি পিএইচপি ফাইল দ্বারা উত্পাদিত হয় তবে আপনি কেবল পিএইচপি সহ এলোমেলো অংশ যোগ করতে পারেন। ইউআরএলকে র্যান্ডমাইজ করার সহজ উপায়টি এলোমেলো ক্যোয়ারী স্ট্রিং প্যারামিটারগুলি যুক্ত করে বেস জিনিসটি উদাহরণ হিসাবে অ্যাজাক্স jQuery অনুরোধের নো-ক্যাশে সেটিংস। ব্রাউজারটি কখনও কখনও 2 টি ইউআরএলকে আলাদা আলাদা ক্যোয়ারী স্ট্রিংগুলি এক হিসাবে বিবেচনা করে না এবং ক্যাশেড সংস্করণটি কখনও ব্যবহার করবে না।

সম্পাদনা

নোট করুন যে আপনার পরীক্ষার মোড_হেডারগুলি করা উচিত । আপনার যদি মোড_হেডার থাকে তবে আপনি সম্ভবত শিরোনাম কীওয়ার্ড দিয়ে মেয়াদউত্তীর্ণ শিরোনাম সেট করতে পারেন ।


ধন্যবাদ, দুর্ভাগ্যক্রমে আমি কোনও পিএইচপি ফাইল ব্যবহার করছি না। আমি mod_headers এবং mod_expires ইনস্টল করব।
dmck

সিএসএস ফাইল ক্যাচিং প্রতিরোধ সম্পর্কে কি?
অ্যারন ফ্র্যাঙ্ক

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

এটি একটি ভাল মানের উত্তর নয়। ওপিতে রিপোর্ট করা সমস্যা সমাধানের পদক্ষেপগুলি কী কী তা বিশদে বিশদ করার চেষ্টা করুন।
লিওপাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.