Server Apache - mencoba menggunakan petunjuk Lokasi di .htaccess
Saya perlu menghapus semua caching ketika jalur tertentu (/ foo / bar /) dipanggil di situs web saya. Dukungan hosting terkelola saya memberi tahu saya bahwa saya harus melakukan ini di .htaccess dan saya telah mencoba menggunakan petunjuk Lokasi, seperti:
<Location "/foo/bar/">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</Location>
Tapi yang saya dapatkan hanyalah kesalahan server internal. Apakah saya meninggalkan sesuatu atau haruskah arahan ini ditempatkan di tempat tertentu di .htaccess. Saya telah mencoba semua yang dapat saya pikirkan, dengan hasil yang sama.
Jawaban
Seperti yang telah disebutkan, <Location>
arahan tidak diizinkan dalam .htaccess
file. Jika /foo/bar/
berhubungan langsung dengan direktori sistem file maka Anda dapat menempatkan .htaccess
file di direktori itu untuk menerapkan arahan ( Header
dalam hal ini) ke direktori itu dan di bawahnya saja.
Namun, jika /foo/bar/
hanya jalur URL (yang juga merupakan <Location>
target direktif dalam konteks server), yang tidak berhubungan langsung dengan sistem file, maka Anda dapat menyetel variabel lingkungan saat jalur URl itu diakses dan menyetel Header
secara kondisional berdasarkan apakah env var itu disetel.
Sebagai contoh:
SetEnvIf Request_URI "^/foo/bar/$" NO_CACHE
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" env=NO_CACHE
Di atas menetapkan env var NO_CACHE
(ke nilai 1
) ketika URL-path /foo/bar/
(hanya) diminta dan Header
direktif kemudian hanya diterapkan ketika env var itu disetel (oleh argumen terakhir env=NO_CACHE
).
Alternatifnya, jika Anda menggunakan Apache 2.4+, Anda dapat menggunakan ekspresi Apache
<If "%{REQUEST_URI} =~ m#^/foo/bar/$#">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
</If>
Alternatif lain, jika Anda menggunakan Apache 2.4.10+ maka Anda dapat menggunakan ekspresi Apache langsung di Header
arahan untuk menargetkan jalur URL itu saja. Sebagai contoh:
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" "expr=%{REQUEST_URI} =~ m#^/foo/bar/$#"
Menurut dokumentasi Apache , Location
arahan tidak dapat digunakan dalam .htaccess
file sama sekali. Anda dapat menggunakan Location
konfigurasi server, tetapi .htaccess
file tersebut selalu merujuk ke direktori saat ini di mana file tersebut berada, jadi menentukan arahan untuk lokasi lain di file itu tidak ada gunanya.
Cukup biarkan Location
direktif keluar, Header
itu sendiri harus berfungsi untuk direktori / lokasi itu.