Uzantıyı kaldırmak iki ayrı işlemdir: kullanıcı veya arama motoru `.php` URL’sine gelirse temiz URL’ye dış 301 yapılır; temiz URL isteği ise gerçek `.php` dosyasına dahili olarak rewrite edilir. Bu iki aşama ayrılmazsa sonsuz yönlendirme ve duplicate URL oluşabilir.
/urun.php -> /urun
Internal rewrite: /urun -> /urun.php
ERR_TOO_MANY_REDIRECTS
404 Not FoundUzantıyı kaldırmak iki ayrı işlemdir: kullanıcı veya arama motoru `.php` URL’sine gelirse temiz URL’ye dış 301 yapılır; temiz URL isteği ise gerçek `.php` dosyasına dahili olarak rewrite edilir. Bu iki aşama ayrılmazsa sonsuz yönlendirme ve duplicate URL oluşabilir.
Apache, LiteSpeed, Plesk proxy veya NGINX-only yapıyı ayırmadan `.htaccess` sonucu beklemeyin.
Mevcut dosyayı tarihli yedekleyin; Apache/LiteSpeed hata kaydındaki directive ve satırı bulun.
Redirect, rewrite, header ve erişim kurallarını aynı anda topluca değiştirmeyin.
curl ile status, Location, Content-Type ve redirect sayısını ölçüp cache katmanlarını ayrıca kontrol edin.
Uzantıyı kaldırmak için tüm URL’lere geniş ve koşulsuz rewrite uygulamayın.
Anlamı: Dahili rewrite tekrar dış redirect koşuluna giriyor.
Muhtemel neden: REQUEST_URI ile ayrım yapılmıyor.
Anlamı: Karşılık gelen `.php` dosyası kontrol edilmiyor.
Muhtemel neden: Yanlış dosya yolu veya alt klasör.
Anlamı: Relative asset yolları yeni URL derinliğine göre çözülüyor.
Muhtemel neden: Base path/relative URL.
Anlamı: Rewrite/redirect query davranışı yanlış.
Muhtemel neden: QSA/QSD veya hedefte `?`.
Anlamı: Directory istisnası yok.
Muhtemel neden: `!-d` koşulu eksik.
Anlamı: Kök path’e rewrite ediliyor.
Muhtemel neden: RewriteBase/relative substitution.
Anlamı: Dosya uzantısı kuralı front-controller ile yarışıyor.
Muhtemel neden: Kural sırası.
Anlamı: Temiz URL fiziksel `.php` dosyasına değil router’a gitmeli.
Muhtemel neden: Front-controller mimarisi.
Bu ifadeyle eşleşen kayıt bulunamadı.
for u in https://example.com/urun.php https://example.com/urun; do curl -sS -o /dev/null -w "$u -> %{http_code} %{url_effective} redirects:%{num_redirects}\n" -L "$u"; doneUzantılı ve temiz URL sonuçlarını karşılaştırır.
curl -sIL --max-redirs 10 'https://example.com/urun.php?id=42' | grep -iE '^HTTP|^location:'Query string ile redirect zincirini gösterir.
find . -maxdepth 2 -type f -name '*.php' -printf '%P\n' 2>/dev/null | sort | head -n 100Rewrite’e konu olabilecek PHP dosyalarını listeler.
grep -nE 'THE_REQUEST|REQUEST_FILENAME|RewriteRule|RewriteCond' .htaccessUzantı ve front-controller kurallarını sıra numarasıyla gösterir.
curl -sL https://example.com/urun | grep -ioE '(src|href)=["'"'][^"'"']+' | head -n 40Temiz URL sayfasındaki asset yollarını gösterir.
curl -sL https://example.com/urun | grep -ioE '<link[^>]+rel=["'"']canonical["'"'][^>]*>' | head -n 1Canonical URL’nin uzantısız hedefi gösterip göstermediğini kontrol eder.
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L]RewriteCond %{THE_REQUEST} \s/+(.+?)\.php(?:[\s?]) [NC]
RewriteRule ^(.+?)\.php$ /$1 [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [END]RewriteRule ^(.+)$ $1.php [L]RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [END]RewriteRule ^(.+)\.html$ $1 [L]RewriteCond %{THE_REQUEST} \s/+(.+?)\.html(?:[\s?]) [NC]
RewriteRule ^(.+?)\.html$ /$1 [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+?)/?$ $1.html [END]RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L]RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L,QSA]Her temiz URL fiziksel bir `.php` dosyasına eşlenebilir.
Front-controller mimarisinde fiziksel uzantı kaldırma yerine router kullanılmalıdır.
WordPress zaten temiz URL üretir; özel dosya kuralları yönetilen bloktan önce olmalıdır.
Hayır. NGINX `.htaccess` dosyalarını okumaz. Kuralın `server` veya `location` yapılandırmasına çevrilmesi gerekir.
Genellikle hayır; Apache `.htaccess` dosyasını istek sırasında değerlendirir. Ancak sunucu VirtualHost, modül veya AllowOverride değişikliğinde reload/restart gerekir.
Mevcut dosyanın tarihli yedeği alınmalı, aktif document root doğrulanmalı ve değişiklik staging veya düşük trafikli zamanda test edilmelidir.
cPanel’de çoğunlukla `public_html`, Plesk’te `httpdocs` içindedir; addon domain ve subdomainlerin document root’u farklı olabilir.
LiteSpeed Apache uyumluluğu sayesinde kuralların büyük bölümünü destekler; bazı modül ve handler davranışları farklı olabilir.
Apache/LiteSpeed error log içindeki tam directive ve satır kaydıdır. Dosyayı rastgele silmek yerine loga göre geri alınmalıdır.
Alan adı, document root, proxy, WordPress ve sunucu yapısı doğrulanmadan doğrudan eklenmemelidir. Örnekler uyarlanıp test edilmelidir.
cPanel, Plesk, LiteSpeed, WordPress, özel PHP ve WISECP yapılarında yönlendirme, rewrite, CORS, erişim ve 500 hatalarını loglarla birlikte inceliyoruz.