KKUT Docs

Htaccess Yapılandırması

Settings/Htaccess.php ile Apache kurallarını, güvenlik başlıklarını ve kurulum yolunu tek yerden üretin.

This article is currently available in Turkish. Its English translation is being prepared.

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.

Elle düzenlemeyin: 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ı

AnahtarAnlamı
createFileDosyanın üretilip üretilmeyeceği. false ise hiçbir şey yazılmaz.
basePathKurulumun URL dizini: null, / ya da /uygulama/. Ayrıntı aşağıda.
headersYanıta eklenecek Header satırları.
inistatus 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.
settingsHam Apache blokları: blok adı bir diziyle verilirse <Blok>…</Blok> olarak yazılır, sayısal anahtarlı girdiler olduğu gibi eklenir.
cacheSı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:

  1. basePath ayarı doluysa o değer.
  2. Web isteğinde SCRIPT_NAME giriş dosyasıyla (kut.php) bitiyorsa onun dizini.
  3. DOCUMENT_ROOT varsa KUT kökünün ona göre göreli yolu.
  4. Konsolda, mevcut .htaccess içindeki ErrorDocument 403 yolu 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-Policy ve Permissions-Policy (kamera, mikrofon, konum kapalı).
  • Erişim engeli: depo ve araç dosyaları (buyruk, composer.json/lock, web.config, phpunit.xml.dist, readme.md, license ve noktayla başlayan her dosya) hangi dizinde olursa olsun deny from all ile kapatılır.
  • Araç dizinleri: Packages, Tests, tmp ve benzeri dizinler 404 döndürür; dağıtım bu dizinlerde kendi .htaccess dosyasını bırakmamış olsa bile açılmaz.
  • HTTPS: HTTPS kapalı gelen istek 301 ile HTTPS adrese yönlendirilir.
  • Authorization başlığı: RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] satırı, Apache'nin PHP-FPM'e atladığı Authorization başlığını PHP'ye ulaştırır. Authorization: Bearer ile kimlik doğrulayan API uçları buna ihtiyaç duyar.
  • Önbellek: tüm istekler kut.php üzerinden geçtiği için php uzantısı için tarayıcı önbelleği ve süre kuralı yazılmaz; yalnız html/htm ve 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']
]
Değişiklik, .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.
KUT Framework 1.0Katmanlı Uygulama Tabanı

Kur. Uyarla. Türet.