Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
PHP uzantısını gizlemek, bir PHP dosyasını /iletisim.php yerine /iletisim gibi bir URL'den çalıştırmaktır. Apache mod_rewrite bunu dahili yeniden yazmayla yapabilir. Eski uzantılı adresin de tek bir tercih edilen adrese yönlenmesi isteniyorsa, dış yönlendirme ile dahili eşlemeyi ayrı kurallar olarak kurmak gerekir.

Aşağıdaki örnek Apache 2.4 üzerinde, site kökündeki gerçek PHP dosyaları içindir. Dosya adlarını harf, rakam, alt çizgi ve tireyle sınırlar. Alt dizinler, boşluklu/kodlanmış dosya adları, PATH_INFO veya framework rotaları için genel bir çözüm olarak kullanılmamalıdır. Bu dar kapsam, örneğin neyi eşlediğini açık tutar.

Önce sunucu koşullarını doğrulayın​


PHP'nin normal /iletisim.php adresinde doğru çalışması, mod_rewrite'ın etkin olması ve ilgili dizinde .htaccess kurallarına izin verilmesi gerekir. Rewrite direktifleri için en az FileInfo kapsamı ve uygun FollowSymLinks veya SymLinksIfOwnerMatch koşulu sağlanmalıdır.

MultiViews etkinse Apache uzantısız isteği kendi içerik uzlaşmasıyla bir dosyaya eşleyebilir. Bu örnekte kapalı olduğunu doğrulayın. Bunu Options -MultiViews ile .htaccess içinde ayarlamak ayrıca Options izni gerektirebilir; izin verilmeyen direktifi eklemek yerine hosting/sunucu ayarını kontrol edin.

Yönlendirme ve dahili eşleme​


İlk denemelerde 302 kullanın. Kuralları mevcut CMS/front controller kurallarını bozmadan, doğru sırada yerleştirin:

Kod:
RewriteEngine On

# Yalnız gerçek dosyaya gelen doğrudan GET/HEAD isteğini yönlendir
RewriteCond %{REQUEST_METHOD} ^(?:GET|HEAD)$
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{THE_REQUEST} s/+[A-Za-z0-9_-]+.php(?:[?s])
RewriteRule ^([A-Za-z0-9_-]+).php$ /$1 [R=302,L]

# Uzantısız isteği yalnız mevcut PHP dosyasına eşle
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([A-Za-z0-9_-]+)$ $1.php [END]

THE_REQUEST, istemcinin ilk istek satırıdır; dahili eşleme bunu .php isteğine dönüştürmez. Bu yüzden /iletisim dahilen PHP'ye eşlendiğinde dış yönlendirme kuralı tekrar çalışmaz. END, Apache 2.4'te bu isteğin per-directory yeniden yazma işlemini sonlandırır.

Dosya ve dizin koşulları mevcut kaynakları korur. Ayrıca karşılık gelen PHP dosyası yoksa kural isteği varsayımsal bir dosyaya göndermez. Hedefte yeni sorgu dizesi tanımlanmadığı için mevcut sorgu varsayılan olarak taşınır; QSA gerekmez.

Örnek davranış​

İstekKoşulBu kuralın sonucu
GET /iletisimiletisim.php varDahili eşleme; adres değişmez
GET /iletisim.php?id=5Dosya var/iletisim?id=5 adresine yönlenir
GET /stil.cssGerçek dosya varKural değiştirmez
GET /olmayanKarşılık gelen PHP yokEşleme yapılmaz
POST /form.phpGerçek dosya varDış yönlendirme yapılmaz

Son satır bilinçli bir sınırdır: 301/302 bazı istemcilerde POST'u GET'e çevirebilir. Mevcut form gönderimlerini otomatik dönüştürmek yerine form action ve API sözleşmesini ayrıca düzenleyip sınayın. Örneğin uzantısız /form isteği, varsa form.php dosyasına dahilen eşlenebilir.

Uygulama ve test sırası​

  1. Mevcut dosyayı koruyun ve kuralları site köküne yerleştirin. Alt dizin kullanıyorsanız başında / olan dış hedefi körlemesine taşımayın; URL ve fiziksel yol bağlamını yeniden belirleyin.
  2. Gerçek bir PHP dosyası için uzantısız adresi açın. Yanıtın çalıştığını, adres çubuğunda .php görünmediğini doğrulayın.
  3. Doğrudan uzantılı GET isteğini ve sorgu parametreli biçimini deneyin. Beklenen konum başlığını ve son yanıtı inceleyin.
  4. CSS, JavaScript, görsel, gerçek klasör ve var olmayan bir adresi kontrol edin. Bu örneğin eşlemediği istekleri mevcut uygulama ele alabilir; hepsine otomatik 200 beklemeyin.
  5. Form action adreslerini, göreli bağlantıları ve varsa AJAX/API isteklerini ayrıca test edin. Başarılı bir gezinme testi POST gövdesinin korunduğunu kanıtlamaz.
  6. HTTPS ve WWW için başka kurallar varsa yönlendirme zincirini birlikte inceleyin. Bu örnek şema veya host politikasını değiştirmez; ek sıçrama ya da çelişen hedef bırakmayın.

Sık yapılan hatalar​


Uzantıyı kaldırmayı güvenlik kontrolü sanmak, bütün yolları ayrım gözetmeden .php'ye eklemek ve test bitmeden kalıcı yönlendirmeye geçmek başlıca hatalardır. URL değişse de PHP işleyicisi, erişim yetkileri ve uygulama güvenliği ayrıca doğru olmalıdır. Koşullar doğrulandığında GET/HEAD gezinme politikası için kalıcı 301 değerlendirilebilir.

Sık sorulan sorular​


Ana sayfadaki index.php bu örnekte otomatik olarak / adresine gider mi?​


Hayır. Bu dar örnek index.php için /index hedefini üretir. Ana sayfanın / olması isteniyorsa DirectoryIndex ve özel kanonik ana sayfa kuralı ayrıca tasarlanmalıdır. Bütün dosyalara uygulanan genel uzantı kuralını ana sayfa politikasıyla karıştırmayın.

Nginx kullanıyorsam aynı dosyayı eklemem yeterli mi?​


Hayır. Nginx .htaccess dosyasını okumaz. Dahili eşleme ve dış yönlendirme, gerçek sunucunun yapılandırmasında uygulanmalıdır. Apache örneğinin söz dizimini başka sunucuya kopyalamak işlevi taşımaz.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic