Htaccess Yapılandırması
Settings/Htaccess.php ile Apache kurallarını, güvenlik başlıklarını ve kurulum yolunu tek yerden üretin.
KUT, Apache için .htaccess dosyasını Settings/Htaccess.php ayarlarından üretir. Dosyayı elle düzenlemek yerine ayarı değiştirin; bir sonraki web isteğinde dosya yeniden yazılır.
Nasıl çalışır?
Web sunucusu Apache olduğunda çekirdek her istekte Htaccess::create() yöntemini çağırır. Yöntem üretilecek içeriği mevcut dosyayla karşılaştırır; fark yoksa hiçbir şey yazmaz. Fark varsa içeriği önce aynı dizindeki geçici bir dosyaya yazar, mevcut dosyanın sahibini, grubunu ve izin bitlerini korur ve dosyayı rename ile tek adımda değiştirir. Eşzamanlı bir istek yarım yazılmış bir .htaccess görmez. Bu yüzden web sunucusu kullanıcısının KUT kök dizinine yazabilmesi gerekir.
createFile açıkken elle yaptığınız değişiklik bir sonraki istekte kaybolur. Nginx gibi .htaccess okumayan bir sunucu önde çalışıyorsa aynı kuralları sunucu yapılandırmasında ayrıca tanımlayın.Ayar anahtarları
| Anahtar | Anlamı |
|---|---|
createFile | Dosyanın üretilip üretilmeyeceği. false ise hiçbir şey yazılmaz. |
basePath | Kurulumun URL dizini: null, / ya da /uygulama/. Ayrıntı aşağıda. |
headers | Yanıta eklenecek Header satırları. |
ini | status true ise Config::ini() değerleri php_value satırları olarak yazılır. Bu satırlar mod_php içindir; PHP-FPM kullanıyorsanız php.ini ya da .user.ini kullanın. |
settings | Ham Apache blokları: blok adı bir diziyle verilirse <Blok>…</Blok> olarak yazılır, sayısal anahtarlı girdiler olduğu gibi eklenir. |
cache | Sıkıştırma (obGzhandler, modGzip) ve tarayıcı önbelleği (modExpires, modHeaders) kuralları. |
Kurulum yolu (basePath)
Yeniden yazma kuralları uygulamanın URL dizinini bilmek zorundadır. Çekirdek bu dizini sırayla şöyle belirler:
basePathayarı doluysa o değer.- Web isteğinde
SCRIPT_NAMEgiriş dosyasıyla (kut.php) bitiyorsa onun dizini. DOCUMENT_ROOTvarsa KUT kökünün ona göre göreli yolu.- Konsolda, mevcut
.htaccessiçindekiErrorDocument 403yolu korunur.
Hiçbiri güvenle belirlenemezse çekirdek hata verir ve dosyayı yazmaz. Alias ya da sembolik bağlantıyla yayınlanan kurulumlarda ve konsoldan yapılan ilk kurulumda basePath değerini açıkça yazın. Geçerli değer, / ile başlayan ve biten, yalnız harf, rakam, _ ve - içeren bir URL dizinidir.
// Settings/Htaccess.php
'basePath' => '/uygulama/',
Üretilen kural sabit göreli bir hedef kullanır ve sorgu dizesini korur:
RewriteBase /uygulama/
RewriteRule ^(.*)$ kut.php?/$1 [QSA,L]
ErrorDocument 403 /uygulama/kut.php
Giriş dosyası adı yalnız harf, rakam, _ ve - ile yazılmış bir .php adı olmalıdır.
Varsayılan güvenlik ayarları
Settings dizinindeki varsayılan Htaccess.php şunları üretir:
- Güvenlik başlıkları:
Strict-Transport-Security,X-Content-Type-Options: nosniff,X-Frame-Options: SAMEORIGIN,Referrer-PolicyvePermissions-Policy(kamera, mikrofon, konum kapalı). - Erişim engeli: depo ve araç dosyaları (
buyruk,composer.json/lock,web.config,phpunit.xml.dist,readme.md,licenseve noktayla başlayan her dosya) hangi dizinde olursa olsundeny from allile kapatılır. - Araç dizinleri:
Packages,Tests,tmpve benzeri dizinler404döndürür; dağıtım bu dizinlerde kendi.htaccessdosyasını bırakmamış olsa bile açılmaz. - HTTPS:
HTTPSkapalı gelen istek301ile HTTPS adrese yönlendirilir. - Authorization başlığı:
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]satırı, Apache'nin PHP-FPM'e atladığıAuthorizationbaşlığını PHP'ye ulaştırır.Authorization: Bearerile kimlik doğrulayan API uçları buna ihtiyaç duyar. - Önbellek: tüm istekler
kut.phpüzerinden geçtiği içinphpuzantısı için tarayıcı önbelleği ve süre kuralı yazılmaz; yalnızhtml/htmve statik dosya kuralları vardır. Aksi halde PHP'nin kendi önbellek başlıklarıyla çakışırdı.
Kendi kuralınızı eklemek için settings altına yeni bir blok yazın:
'settings' =>
[
'FilesMatch "^(?i:ozel\.txt)$"' => ['deny from all']
]
.htaccess dosyası bir sonraki web isteğinde yeniden yazıldığında geçerli olur. Dosya yazılamıyorsa ya da createFile kapalıysa mevcut dosya aynen kalır.