WordPress .htaccess Rehberi: Kalıcı Bağlantılar, Güvenlik ve Yönlendirme Ayarları

  • Konuyu Başlatan Konuyu Başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi

Admin

Webmaster
Admin
Kurumsal+
Puan 18
Çözümler 0
Katılım
3 Kas 2025
Mesajlar
99
Tepkime puanı
0

WordPress .htaccess Rehberi: Kalıcı Bağlantılar, Güvenlik ve Yönlendirme Ayarları​

WordPress’te ana sayfa açıldığı hâlde yazıların 404 vermesi, HTTPS yönlendirmesinin döngüye girmesi veya bir yapılandırma değişikliğinden sonra 500 hatası oluşması, .htaccess dosyasını kontrol etmeyi gerektirebilir.
Bu küçük dosya, uygun sunucu ortamında URL kurallarından dosya erişimine kadar birçok ayarı yönetir. Ancak internette bulunan her kodu aynı dosyaya eklemek doğru değildir. Kuralın yazımı, dosyadaki konumu ve sunucunun desteklediği özellikler sonucu belirler.
Bu rehberde WordPress’in standart .htaccess yapısını, kullanışlı ek kuralları ve hata durumunda izlenecek adımları ele alacağız.

.htaccess Dosyası Nedir?​

.htaccess, Apache web sunucusunda dizin düzeyinde yapılandırma yapmayı sağlayan bir dosyadır. Sunucunun ana ayarlarına erişmeden, belirli bir klasör ve altındaki içerik için kurallar tanımlanabilir.
WordPress açısından en bilinen görevi, kalıcı bağlantıları çalıştırmaktır. Örneğin:
https://ornek.com/?p=123
yerine şu adresin kullanılabilmesini sağlar:
https://ornek.com/wordpress-rehberi/
Bunun yanında yönlendirmeler, erişim kısıtlamaları, dizin listeleme ve bazı önbellek başlıkları da bu dosya üzerinden yönetilebilir.
Dosyanın bulunması, içindeki bütün kuralların uygulanacağı anlamına gelmez. Apache’de hangi yönergelere izin verildiği AllowOverride ve AllowOverrideList gibi sunucu ayarlarıyla belirlenir.

Hangi sunucularda çalışır?​

Sunucu yapısı.htaccess durumu
Apacheİzin verilen yönergeler uygulanır.
LiteSpeed Web ServerBirçok Apache kuralı desteklenir; uyumluluk yönergeye göre değişebilir.
Yalnızca NginxDosya okunmaz; kurallar Nginx yapılandırmasında tanımlanır.
Nginx önünde, Apache arkasındaApache’ye ulaşan isteklerde etkili olabilir; Nginx’in doğrudan sunduğu içerik ayrıca değerlendirilir.

LiteSpeed’in Apache ile uyumlu olması, her Apache modülünün ve bütün yönergelerin aynı şekilde desteklendiği anlamına gelmez.

WordPress .htaccess Dosyası Nerede Bulunur?​

Standart bir kurulumda .htaccess, sitenin belge kökünde; çoğunlukla index.php, wp-admin ve wp-content ile aynı dizinde bulunur.
Hosting panelinde bu klasörün adı public_html veya httpdocs olabilir. WordPress’in alt dizine kurulduğu ya da site giriş dosyasının farklı bir konumda bulunduğu yapılarda dosyanın yeri ve kurallar değişebilir.
Dosya görünmüyorsa Dosya Yöneticisi veya bağlantı istemcisindeki gizli dosyaları göster seçeneğini açın. Adının başındaki nokta nedeniyle listede gizlenmiş olabilir.
Düzenleme öncesinde:
  1. Mevcut dosyanın bir kopyasını indirin.
  2. Eklemeyi düşündüğünüz kuralın amacını belirleyin.
  3. Her seferinde tek bir değişiklik yapın.
  4. Ana sayfayı, bir yazıyı ve yönetim panelini kontrol edin.
Yedek kopyayı bilgisayarınızda veya web üzerinden erişilemeyen bir konumda saklayın. Yapılandırma yedeklerini sitenin herkese açık klasöründe bırakmak uygun değildir.

WordPress’in Standart .htaccess Kuralları​

Alan adının kökünde çalışan, tek siteli bir WordPress kurulumu için yaygın temel yapı şöyledir:
Kod:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Bu örneği Multisite veya alt dizin kurulumuna doğrudan uygulamayın. İlgili kurulumun oluşturduğu kuralları kullanın. WordPress’in resmî belgelerinde tek site ve Multisite için farklı örnekler bulunur.
Temel satırların görevleri:
KuralAçıklama
RewriteEngine OnYeniden yazma işlemlerini etkinleştirir.
HTTP_AUTHORIZATION satırıYetkilendirme başlığının uygulamaya aktarılmasına yardımcı olur.
RewriteBase /Bu örnekte kök dizin yolunu belirtir.
^index\.php$ kuralıGiriş dosyasının yeniden yazılmasını önler.
!-f ve !-d koşullarıGerçek dosya ve dizinleri sonraki kurala dahil etmez.
Son RewriteRuleDiğer uygun istekleri içeride index.php üzerinden işler.

Son işlem, ziyaretçiyi başka bir adrese gönderen 301 yönlendirmesi değildir. Tarayıcıdaki adres korunur; WordPress isteğin hangi içeriğe ait olduğunu çözümler.

Özel Kurallar Dosyanın Neresine Eklenmeli?​

# BEGIN WordPress ve # END WordPress arasındaki bölüm WordPress tarafından yönetilir. Kalıcı bağlantı kuralları yeniden oluşturulduğunda buradaki elle yapılmış eklemeler kaybolabilir.
Özel kuralları bu bölümün dışında tutun. Ancak her kuralın mutlaka WordPress bloğunun altına yazılması gerektiği düşüncesi yanlıştır.
Özellikle HTTPS geçişi ve eski sayfa yönlendirmeleri, WordPress’in genel yeniden yazma kuralından önce değerlendirilmelidir. Bu nedenle genellikle bloğun üstüne yerleştirilir.
Ayrıca önbellek ve güvenlik eklentileri kendi işaretli bölümlerini oluşturabilir. Bu alanların içine elle ekleme yapmadan önce eklentinin nasıl çalıştığını kontrol edin.

Hassas Dosyalara Web Erişimini Kısıtlama​

Apache 2.4 için yeni erişim kuralları yazarken Require sözdizimi kullanılmalıdır. Eski Order, Allow ve Deny yönergeleri kullanımdan kaldırılmış kabul edilir; eski yapılandırmalarla yeni kuralları gelişigüzel karıştırmayın.

wp-config.php dosyasını koruma​

Aşağıdaki kuralı WordPress’in yönettiği bölümün dışına ekleyebilirsiniz:
Kod:
<Files "wp-config.php">
    Require all denied
</Files>
Bu kural dosyaya doğrudan HTTP erişimini engeller. WordPress’in dosyayı sunucu içinde yüklemesini engellemez.
Veritabanı bilgilerini içeren bu dosyanın yedeklerini de herkese açık dizinlerde tutmayın.

Belirli yapılandırma dosyalarını koruma​

İhtiyaca göre şu dosya adları hedeflenebilir:
Kod:
<FilesMatch "^(?:\.env(?:\..*)?|\.user\.ini|\.htaccess|\.htpasswd)$">
    Require all denied
</FilesMatch>
Buradaki \. ifadesi gerçek nokta karakterini eşleştirir. Düzenli ifadelerde nokta, kaçış işareti olmadan kullanıldığında herhangi bir karakteri temsil eder.
Örneğin ^. yazmak, “noktayla başlayan dosyalar” anlamına gelmez; neredeyse bütün dosya adlarını eşleştirebilir.
Noktayla başlayan bütün yolları kontrolsüz biçimde engellemek de sorun oluşturabilir. /.well-known/acme-challenge/ yolu, bazı SSL doğrulama işlemlerinde kullanılır.

Dizin Listelemesini Kapatma​

Bir klasörde uygun giriş dosyası yoksa ve sunucuda dizin listeleme açıksa, klasör içeriği ziyaretçilere gösterilebilir.
Bunu kapatmak için:
Options -Indexes
Bu ayar dosyalara doğrudan erişimi tamamen engellemez; yalnızca otomatik klasör listesini kapatır.
Sağlayıcı .htaccess içinde Options kullanımına izin vermiyorsa hata oluşabilir. Böyle bir durumda satırı kaldırıp ayarın sunucu veya panel üzerinden uygulanmasını isteyin.

xmlrpc.php Erişimini Kapatmalı mısınız?​

XML-RPC, bazı uzaktan yayın ve entegrasyon işlemlerinde kullanılır. İhtiyacınız yoksa erişimini kısıtlamak değerlendirilebilir:
Kod:
<Files "xmlrpc.php">
    Require all denied
</Files>
Ancak bu kuralı eklemeden önce kullandığınız hizmetleri kontrol edin. Jetpack, WordPress.com ile iletişiminde XML-RPC kullanır; dosyaya erişimin kapatılması bağlantıyı bozabilir.
Dosyanın engellenmesi, bütün saldırı türlerine karşı koruma sağlamaz. Güncel yazılım, güçlü hesap güvenliği ve uygun sunucu önlemleri ayrıca gereklidir.

Uploads Klasöründeki PHP Dosyalarına Erişimi Engelleme​

wp-content/uploads çoğunlukla görsel ve belge yüklemeleri için kullanılır. Bu klasöre yüklenmiş çalıştırılabilir dosyalara web erişimini engellemek ek koruma sağlayabilir.
Yalnızca [B]wp-content/uploads[/B] içine ayrı bir .htaccess dosyası ekleyerek şu örnek kullanılabilir:
Kod:
<FilesMatch "(?i)\.(?:php[0-9]*|phtml|phar)(?:\.|$)">
    Require all denied
</FilesMatch>
Bu örnek, belirtilen dosya adı kalıplarına gelen web isteklerini reddeder. Sunucunun çalıştırılabilir kabul ettiği farklı uzantılar varsa ayrıca değerlendirilmelidir.
Kural, başka bir PHP dosyasının sunucu içinde zararlı kodu yüklemesini engelleyen tam bir izolasyon mekanizması değildir.
Aynı engeli bütün wp-content dizinine uygulamayın. Tema ve eklentiler burada bulunduğu için sitenin işleyişi bozulabilir. Uploads içinde özel uygulama dosyaları kullanan bir sisteminiz varsa değişikliği önce test edin.

Eski Bir Sayfayı Yeni Adrese Yönlendirme​

Tek bir eski adresi yeni sayfaya yönlendirmek için, kök dizindeki .htaccess dosyasında WordPress bloğunun üstüne şu örnek eklenebilir:
Kod:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^eski-sayfa/?$ https://ornek.com/yeni-sayfa/ [R=302,L]
</IfModule>
Alan adını ve yolları kendi sitenize göre değiştirin.
Test sırasında 302 kullanmak, kalıcı yönlendirmenin tarayıcıda saklanması nedeniyle yaşanabilecek karışıklığı azaltır. Hedef doğru çalışıyorsa ve değişiklik kalıcıysa R=301 olarak düzenleyebilirsiniz.
.htaccess bağlamındaki bu örnekte eşleşen yolun başına / yazılmaz. ^ ve $ işaretleri de eşleşmeyi belirtilen adresle sınırlar.
Eski sayfanın karşılığı varsa kullanıcıyı o sayfaya yönlendirin. Bütün kaldırılmış adresleri ana sayfaya göndermek, her durum için uygun bir çözüm değildir.

HTTP’den HTTPS’e Yönlendirme​

Önce SSL sertifikasının geçerli olduğundan ve sitenin HTTPS adresinden düzgün açıldığından emin olun.
HTTPS bağlantısının doğrudan ilgili web sunucusunda sonlandığı bir ortam için örnek:
Kod:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://ornek.com%{REQUEST_URI} [R=302,L]
</IfModule>
Bu bloğu WordPress kurallarının üstüne yerleştirin. ornek.com yerine tercih ettiğiniz alan adını yazın. Kontrol tamamlandığında kalıcı geçiş için 302 değerini 301 yapabilirsiniz.
Cloudflare veya başka bir ters proxy varsa yapı ayrıca değerlendirilmelidir. Ziyaretçi HTTPS kullanırken arka sunucu HTTP isteği alıyorsa, yalnızca %{HTTPS} kontrolüne dayanan kural yönlendirme döngüsü oluşturabilir. Cloudflare’ın Flexible modu ile sunucudaki HTTPS zorlama ayarı buna örnektir.
Panelde veya CDN’de zaten yönlendirme varsa aynı işlemi birden fazla yerde tekrar tanımlamadan önce mevcut yapıyı kontrol edin.

Tarayıcı Önbellekleme Ayarları​

Statik dosyaların tarayıcıda saklanması, tekrar ziyaretlerde indirme ihtiyacını azaltabilir. Apache’de mod_expires destekleniyorsa örnek bir yapı şöyledir:
Kod:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/webp "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
ExpiresByType text/javascript "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
</IfModule>
Süreler örnektir. mod_expires, uygun yanıtlar için Expires ve Cache-Control: max-age başlıklarını oluşturabilir.
Uzun süre önbelleğe alınan dosyayı aynı URL’de değiştirdiğinizde kullanıcı eski sürümü görmeye devam edebilir. Bu nedenle dosya sürümleme yöntemiyle önbellek süresi birlikte düşünülmelidir.
HTML, kullanıcı hesabı, sepet ve ödeme içeriklerine gelişigüzel uzun önbellek süreleri uygulamayın. Tarayıcı önbelleği ile WordPress sayfa önbelleği ayrı mekanizmalardır.

GZIP Sıkıştırma Kullanımı​

Metin tabanlı içerikleri sıkıştırmak, aktarılacak veri miktarını azaltabilir:
Kod:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript application/javascript application/json
</IfModule>
Bu örnek Apache’nin mod_deflate filtresini kullanır. Kazanç, içeriğe göre değişir; bütün dosyalar için sabit bir küçülme oranı beklenmez.
Sunucu veya CDN zaten GZIP ya da Brotli uyguluyorsa ek kural gerekmeyebilir. Tarayıcının geliştirici araçlarında yanıtın Content-Encoding başlığını kontrol edebilirsiniz.

.htaccess Hataları Nasıl Çözülür?​

BelirtiKontrol edilecek noktalar
Değişiklikten sonra 500 hatasıSon eklenen kural, desteklenmeyen yönerge veya izin verilmeyen ayar
Ana sayfa açılıyor, yazılar 404Kalıcı bağlantı kuralları, mod_rewrite, doğru dosya konumu
Yönlendirme çalışmıyorKural sırası, adres eşleşmesi, proxy ve diğer yönlendirmeler
Sürekli yönlendirme oluşuyorHTTP/HTTPS algısı, CDN modu, birbiriyle çelişen kurallar
Beklenmeyen 403 hatasıRequire kuralları, hatalı dosya eşleştirmesi, dizin listeleme ayarı
Değişiklik etkisizSunucu türü, AllowOverride, Nginx’in doğrudan sunduğu içerik veya önbellek

Yeni bir düzenlemeden hemen sonra sorun başladıysa önce son değişikliği geri alın. Ardından sunucunun hata kaydını inceleyin.
Dosyanın tamamını kaldırmak, yönlendirme ve güvenlik kurallarını da devre dışı bırakabilir. Bu yüzden mümkünse bilinen çalışan kopyayı geri yükleyin.
Kalıcı bağlantı kuralları bozulmuşsa Ayarlar → Kalıcı Bağlantılar → Değişiklikleri Kaydet işlemi yardımcı olabilir. WordPress’in dosyayı otomatik güncelleyebilmesi için uygun yazma yetkisi gerekir. Sorunu çözmek amacıyla kontrolsüz biçimde 777 izni vermeyin.

Sıkça Sorulan Sorular​

.htaccess dosyasını silersem site tamamen kapanır mı?​

Her kurulumda aynı sonuç oluşmaz. Dosyaya bağlı kalıcı bağlantılar, yönlendirmeler ve erişim kuralları kaybolabilir. Sunucu seviyesinde eşdeğer kurallar varsa bazı işlevler devam edebilir.

Değişiklikten sonra sunucuyu yeniden başlatmak gerekir mi?​

Apache’de .htaccess değişiklikleri genellikle sonraki istekte değerlendirilir. Ana sunucu yapılandırmasındaki değişiklikler ise farklıdır ve yeniden yükleme gerektirebilir.

Dosyada IfModule varsa hata oluşmayacağı garanti mi?​

Hayır. IfModule, ilgili modül yoksa bloğu atlamayı sağlar. Modül mevcutken yazım hatası veya izin verilmeyen bir yönerge yine sorun çıkarabilir.

.htaccess dosyası yoksa elle oluşturabilir miyim?​

Sunucunuz destekliyorsa ve doğru dizini biliyorsanız oluşturabilirsiniz. Dosyanın adının tam olarak .htaccess olduğundan, sonuna .txt eklenmediğinden emin olun.

LiteSpeed Cache kullanıyorsam elle kural eklemeli miyim?​

Önce eklentinin, sunucunun ve varsa CDN’nin mevcut ayarlarını inceleyin. Aynı işlevi birden fazla yerde yönetmek sorun takibini zorlaştırabilir. LiteSpeed kullanılması, bütün önbellek ayarlarının kendiliğinden doğru yapılandırıldığı anlamına gelmez.

.htaccess tek başına WordPress güvenliği için yeterli mi?​

Dosya erişimini ve bazı istekleri sınırlandırabilir. WordPress, tema ve eklenti güncellemeleri; hesap güvenliği; yedekleme ve sunucu koruması ayrıca ele alınmalıdır.
 

Benzer Konular

3 konu
Geri
Üst