วิธีแก้ปัญหาข้อความแสดงข้อผิดพลาด“ ExpiresActive ไม่อนุญาตที่นี่” ในไฟล์. htaccess


11

ฉันกำลังพยายามเพิ่มส่วนหัว Expires ให้กับการตอบกลับ HTTP ของเว็บไซต์ที่ฉันกำลังทำงานอยู่ วิธีเดียวที่ฉันจะควบคุมเซิร์ฟเวอร์ Apache 1.3 คือการแก้ไขไฟล์. htaccess ของฉัน ฉันพยายามเพิ่มรหัสเช่นต่อไปนี้เพื่อเปิดใช้งานส่วนหัว Expires:

<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresDefault "access plus 1 hour"
</IfModule>

อย่างไรก็ตามผลลัพธ์นี้เกิดข้อผิดพลาดภายในของเซิร์ฟเวอร์พร้อมกับข้อความแสดงข้อผิดพลาดต่อไปนี้ในบันทึก:

ExpiresActive ไม่อนุญาตที่นี่

ฉันอาจไม่สามารถใช้วิธีอื่นในการควบคุมแคชได้เนื่องจาก mod_headers ไม่ได้เปิดใช้งาน มีวิธีใดบ้างที่ฉันยังสามารถเปิดใช้งานส่วนหัว Expires โดยใช้ mod_expires ผ่านคำสั่งบางอย่างในไฟล์. htaccess

อัปเดต
ฉันจำได้ว่ากำลังอ่านการตั้งค่า Override ใน httpd.conf ซึ่งอาจเกี่ยวข้องกับสิ่งนั้น มีวิธีการตรวจสอบว่าเป็นปัญหาจริง ๆ หรือไม่ ถ้าเป็นเช่นนั้นมีวิธีแก้ปัญหาบางอย่างในการควบคุมส่วนหัวแคชสำหรับเว็บไซต์ของฉันหรือไม่?

คำตอบ:


12

ในบันทึกทั่วไปวิธีที่ง่ายที่สุดในการจัดการกับปัญหาเช่นนี้หมายถึงคู่มือ

http://httpd.apache.org/docs/1.3/mod/mod_expires.html#expiresactive

Syntax:      ExpiresActive On|Off
Context:     server config, virtual host, directory, .htaccess
Override:    Indexes
Status:      Extension
Module:      mod_expires

เขตข้อมูลที่น่าสนใจสองแห่งคือบริบทและการแทนที่ ในขณะที่เราสามารถเห็นมันตกลงที่จะใช้ ExpiresActive ในไฟล์. htaccess ตราบเท่าที่คุณ AllowOverride ดัชนี

ปรับปรุง:

เพื่อตอบสนองความต้องการของคุณสำหรับส่วนหัวที่หมดอายุ ตรวจสอบ/programming/1036941/setup-expires-headers-php-apache

หวังว่าจะช่วย :)


ขอบคุณสำหรับการตอบกลับของคุณ แต่เนื่องจากคำถามของฉันได้ระบุไว้แล้ว: ฉันไม่สามารถเข้าถึงการกำหนดค่าเซิร์ฟเวอร์นอกเหนือจากผ่านไฟล์. htaccess ในเว็บรูทของฉัน ดังนั้นหากการตั้งค่า AllowOverride ไม่ถูกต้องฉันก็โชคไม่ดี
Daan

คุณควรพูดคุยกับผู้ให้บริการของคุณเกี่ยวกับเรื่องนั้น การไม่อนุญาตให้ใช้ดัชนีเป็นเพียงความโง่เขลา และใช่ถ้าพวกเขาไม่สามารถ / ไม่เปลี่ยนมันคุณก็หลงทางไปจนถึง mod_expires
Rune Nilssen

เพียงเพื่อสะท้อนจุดของ Rune - หากผู้ให้บริการของคุณจะไม่เปลี่ยนพารามิเตอร์ AllowOverride ของพวกเขาแล้วไม่มีอะไรที่คุณสามารถทำได้
DaveG

3

การเพิ่ม "AllowOverride Indexes" ให้กับ conf ของ Apache สำหรับโฟลเดอร์ที่คุณมี htaccess ให้ใช้งานได้สำหรับฉัน พบวิธีแก้ปัญหาที่นี่http://speedforce.org/2009/01/were-back/


1
ขอบคุณสำหรับการตอบกลับของคุณ แต่เนื่องจากคำถามของฉันได้ระบุไว้แล้ว: ฉันไม่สามารถเข้าถึงการกำหนดค่าเซิร์ฟเวอร์นอกเหนือจากผ่านไฟล์. htaccess ในเว็บรูทของฉัน ดังนั้นหากการตั้งค่า AllowOverride ไม่ถูกต้องฉันก็โชคไม่ดี
Daan

1

บน RHEL ใน /etc/httpd/conf/httpd.conf

เปลี่ยน AllowOverride None

เพื่อ AllowOverride ดัชนีตัวเลือก FileInfo


2
ขอบคุณสำหรับการตอบกลับของคุณ แต่อีกครั้งเนื่องจากคำถามของฉันระบุไว้แล้ว: ฉันไม่สามารถเข้าถึงการกำหนดค่าเซิร์ฟเวอร์นอกเหนือจากผ่านไฟล์. htaccess ในรูทเว็บของฉัน ดังนั้นหากการตั้งค่า AllowOverride ไม่ถูกต้องฉันก็โชคไม่ดี
Daan

0

ในกรณีของฉัน mod_expires ไม่พร้อมใช้งาน แต่ headers_module เป็นสิ่งนี้ทำงานได้ดี (บน Apache 2.0):

# match all these file types, regardless of upper/lowercase
<FilesMatch "\.(?i:jpg|png|gif|js|css)$">
    # 60 seconds * 60 minutes * 24 hours * 7 days
    Header set Cache-Control "max-age=604800, public, must-revalidate"

    # alternative: never expire headers (do look up the caveats)
    # Header set Expires "Thu, 01 Jan 2030 08:08:00 GMT"
    # Header set Cache-Control "public, no-transform"

    # further (debatable) optimizations
    # FileETag None
    # Header unset ETag
    # Header unset Last-Modified
</FilesMatch>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.