WordPress İçin Faydalı “htaccess” Kodları

Bir .htaccess dosyası, sunucunuza web sitenize nasıl hizmet vereceğiniz konusunda komutlar verebileceğiniz dağıtılmış bir Apache sunucusu yapılandırma dosyasıdır . Güvenlik ayarları, dizin koruması, güzel kalıcı bağlantılar, URL’leri yeniden yönlendirme ve yeniden yazma ve diğerleri gibi birçok farklı yapılandırma türü için kullanılabilir.

Ana .htaccess dosyası, canlı sunuculardaki public_html klasörünün içinde kök dizininizde bulunabilir. Ancak, diğer dizinlerin içinde de bir .htaccess dosyası kurmak mümkündür. Örneğin, wp-admin klasörüne bir .htaccess eklemek, BulletProof Security gibi popüler güvenlik eklentileri tarafından kullanılan yaygın bir güvenlik çözümüdür.

Wordpress İçin Temel .htaccess Dosyası

Her WordPress, kök dizininizde bulabileceğiniz varsayılan bir .htaccess dosyasıyla birlikte gelir. Dosya, WordPress siteniz için Kalıcı Bağlantıları etkinleştirdiğinizde oluşturulur. Varsayılan .htaccess şöyle görünür:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L] RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L] </IfModule>
# END WordPress

.htaccess özelleştirme işleminizde bir şeyler ters giderse istediğiniz zaman varsayılan sürüme geri dönebilirsiniz. # ile başlayan satırlar kod yorumlarıdır. WordPress çekirdeği bu bölümün üzerine yazabileceğinden, #BEGIN WordPress ve #END WordPress yorumları arasına hiçbir şey eklemeyin.

#END WordPress’ten sonra varsayılan kuralların altına özel .htaccess kurallarını eklemeniz gerekir. Herhangi bir değişiklik yapmadan önce, her zaman mevcut .htaccess’inizin bir kopyasını alıp bilgisayarınıza indirerek yedekleyin. Hadi birlikte özelleştirebileceğiniz .htaccess kodlarını birlikte inceleyelim.

1- Dizinleri Taramayı Devre Dışı Bırakma

Varsayılan olarak, dizin tarama WordPress’te etkindir. Bu, internetteki herkesin klasörlerinizin içeriğini listeleyebileceği ve WordPress kurulumunuzdaki güvenlik açıklarını kolayca bulabileceği anlamına gelir. .htaccess dosyanıza aşağıdaki kuralı ekleyerek dizin tarama özelliğini devre dışı bırakabilirsiniz:

Options -Indexes

2- Şüpheli IP Adreslerini Engelleme

.htaccess ile sitenize erişim izni vermek istemediğiniz IP adreslerini herhangi bir nedenle kolayca engelleyebilirsiniz. IP adreslerini , her satırda bir tane olacak şekilde Reddetme kurallarına eklemeniz yeterlidir:

Order allow,deny
Deny from xxx.xxx.xx.xx
Deny from yyy.yyy.yy.yy
Allow from all

3- Savunmasız Dosyaları Koruma

Hata günlüklerini ve yapılandırma dosyalarını korumak, veritabanı kullanıcı adınız ve parolanız gibi savunmasız verileri içerdiklerinden önemli bir güvenlik görevidir. .htaccess veya wp-config.php gibi farklı yapılandırma dosyalarını tek tek korumak mümkün olsa da, aşağıdaki toplu kuralı kullanmak daha kolaydır. WordPress kurulumunuzdaki en savunmasız dosyaları yetkisiz erişime karşı korur.

<FilesMatch “^.*(error_log|wp-config\.php|php.ini|\.[hH][tT][aApP].*)$”>
Order deny,allow
Deny from all
</FilesMatch>

4- wp-includes Klasörüne Erişimi Engelleme

wp-includes klasörü önemli Wordpress çekirdek dosyalarını içerir. Aslında, kimsenin bu dosyalara erişmesine gerek yoktur, ancak kötü niyetli saldırganlar tarafından hedef alınabilirler. Bu nedenle, .htaccess dosyanıza aşağıdaki kuralları ekleyerek bu dizine erişimi devre dışı bırakmak iyi bir güvenlik uygulamasıdır:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ – [F,L] RewriteRule !^wp-includes/ – [S=3] RewriteRule ^wp-includes/[^/]+\.php$ – [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php – [F,L] RewriteRule ^wp-includes/theme-compat/ – [F,L] </IfModule>

5- 301 Yönlendirmelerini Ayarlama

301 yönlendirmeleri, ziyaretçilerinizi bir URL’den diğerine yönlendirebileceğiniz kalıcı yönlendirmelerdir. İçeriği yeni bir konuma yerleştirdiğinizde URL’leri yeniden yazmanın önerilen, SEO dostu yolunu oluştururlar. .htaccess dosyanızda 301 yönlendirmelerinizi kolayca yönetebilirsiniz . Bunları alt alta tek tek eklemeniz yeterli.

/oldurl1/ ve /oldurl2/ yerine, gönderi bilgisini eklemeniz yeterlidir. Yeni URL’ler için her zaman http:// veya https:// protokolü de dahil olmak üzere tam URL’yi ekleyin. Kodu vereceğim ancak kullandığınız SEO eklentisi içerisinde 301 yönlendirme alanı yer alacaktır. Önerim SEO eklentiniz içerisinden kullanmanız olacaktır.

Redirect 301 /oldurl1/ https://www.yoursite.com/newurl1/
Redirect 301 /oldurl2/ https://www.yoursite.com/newurl2/

6- PHP Dosyalarına Doğrudan Erişimi Kapatma

Temanızdaki PHP dosyalarına ve wp-content dizini içindeki eklenti klasörlerine doğrudan erişimi engellemek de iyi bir güvenlik uygulamasıdır. Bu şekilde hackerların PHP dosyalarınıza kötü amaçlı kod eklemesini önleyebilirsiniz.

RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(.*\.php)$ – [R=404,L] RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
RewriteRule wp-content/themes/(.*\.php)$ – [R=404,L]

7- XML-RPC Erişimini Kaldırma

XML-RPC arabirimi, Jetpack gibi üçüncü taraf uygulamalara sitenize erişim sağlar. Böylece içerik yayınlayabilir veya üzerinde farklı eylemler gerçekleştirebilirler. XML-RPC, varsayılan olarak her WordPress sitesinde etkindir. Ancak, saldırganlar tarafından kolayca istismar edilebilir, bu nedenle sitenizde üçüncü taraf uygulamaları kullanmak istemiyorsanız, devre dışı bırakmanız daha iyi olur. İsterseniz, kurala istisna olarak belirli IP adreslerini ekleyebilirsiniz.

<FilesMatch “^(xmlrpc\.php)”>
Order deny,allow
Allow from xxx.xxx.xx.xx
Allow from yyy.yyy.yy.yy
Deny from all
</FilesMatch>

8- Tarayıcı Önbelleğe Almayı Etkinleştirme

Kullanıcılarınızın tarayıcılarının her zaman resim ve komut dosyası gibi statik dosyaları indirmek zorunda kalmaması için sunucunuzda tarayıcı önbelleğe almayı etkinleştirerek sitenizi hızlandırabilirsiniz. Aşağıdaki .htaccess snippet’i, WordPress için önerilen tarayıcı önbelleğe alma sona erme zaman çerçevelerini içerir:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg “access 1 year”
ExpiresByType image/jpeg “access 1 year”
ExpiresByType image/gif “access 1 year”
ExpiresByType image/png “access 1 year”
ExpiresByType text/css “access 1 month”
ExpiresByType application/pdf “access 1 month”
ExpiresByType text/x-javascript “access 1 month”
ExpiresByType application/x-shockwave-flash “access 1 month”
ExpiresByType image/x-icon “access 1 year”
ExpiresDefault “access 2 days”
</IfModule>

9- Kötü Amaçlı Komut Dosyası Enjeksiyonlarını Önleme

Hackerlar, WordPress sitelerinde sıklıkla GLOBALS ve _REQUEST değişkenlerini hedefler. Sitenize kötü amaçlı kod bulaştırabilmeleri için bu değişkenleri değiştirmeye çalışırlar. Aşağıdaki .htaccess kuralları, sunucunuzun bu değişiklikleri reddetmesine neden olur:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

10- wp-content Klasörünü Koruma

wp -content klasörünüz eklentilerinizi, temalarınızı, resim yüklemelerinizi, yedeklerinizin bir kısmını ve diğer önemli içerikleri içerir. Resimler, CSS ve JavaScript gibi statik dosyalar dışında, wp-content dizinine erişim vermek için hiçbir neden yoktur.

Bu kod parçacığı için ayrı bir .htaccess dosyası oluşturmanız ve onu wp-content klasörünüze yerleştirmeniz gerekir. Kullanıcılarınızın tarayıcılarının erişmesini istediğiniz tüm dosya türlerini basitçe ekleyebilirsiniz:

Order deny,allow
Deny from all
<Files ~ “.(xml|css|js|jpe?g|png|gif|pdf|docx|zip|rar)$”>
Allow from all
</Files>

11- Kullanıcı Numaralarını Engelleme

WordPress, aynı yazara ait tüm makaleleri görüntüleyen yazar sayfaları için belirli bir URL yapısı kullanır. Her yazarın author=1 ile başlayan bir kimlik numarası vardır.

Örneğin, bir kullanıcı URL çubuğuna http://www.yoursite.com/?author=1 girerse tarayıcı, yazarın tüm gönderilerini kullanıcı adıyla birlikte görüntüleyen yazar sayfasını yükler. Aynı teknikle, her yazarın kullanıcı adını bulmak kolaydır. Ancak, .htaccess dosyanıza aşağıdaki kuralları ekleyerek kullanıcı adı numaralandırmasını önleyebilirsiniz :

RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]

12- Özel Hata Kodu Sayfaları Ekleme

WordPress varsayılan hata sayfalarıyla birlikte gelse de, özel hata sayfaları da oluşturabilir ve bunları .htaccess dosyanız aracılığıyla kullanıcılarınıza sunabilirsiniz. Hata hata kodu sayfalarınızı HTML veya PHP’de oluşturmanız ve bunları kök klasörünüze (canlı sunucularda public_html) yüklemeniz gerekir. Her hata durum kodu için aynı hata sayfasını kullanabilir veya her biri için ayrı ayrı oluşturabilirsiniz.

ErrorDocument 404 /error404.html
ErrorDocument 403 /error403.html
ErrorDocument 500 /error500.html
ErrorDocument 501 /error501.html

13- wp-admin Klasörünü Koruma

Sizin ve tüm yöneticilerinizin statik bir IP’si varsa, .htaccess’inize aşağıdaki kuralları ekleyerek WordPress yönetici alanınızı koruyabilirsiniz. Aşağıdaki kod parçacığı, yalnızca İzin ver kurallarında tek tek listelediğiniz IP adreslerine erişim izni verir.

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName “WordPress Admin Access Control”
AuthType Basic
<LIMIT GET>
Order deny,allow
Deny from all
Allow from xxx.xxx.xx.xx
Allow from yyy.yyy.yy.yy
</LIMIT>

14- Bakım Sayfasını Aktif Hale Getirme

Bu .htaccess kuralının çalışması için ayrı bir bakım sayfasına (maintenance.html) ihtiyacınız var. Bu kod, WordPress sitenizi bakım moduna geçirir:

# Redirects to maintenance page
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC] RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC] RewriteRule .* /maintenance.html [R=503,L] </IfModule>

WordPress kurulumunuza özel .htaccess kuralları eklemek sitenizi daha güvenli hale getirir ve sayfalarınız da eskisinden daha hızlı yüklenir. Performans hakkında daha fazla bilgi edinmek istiyorsanız, WordPress sitenizi nasıl optimize edebileceğinizi açıklayan adım adım kılavuzuma göz atın.

Efehan Yıldız

Efelerin Efesi sözünü mutlaka duymuşsunuzdur. Ben bu sözü biraz değiştirip Efelerin Efesi değil, Dijitalin Efe’si sözü ile yola çıktım. İddialı bir söz olduğunun farkındayım ama iddialı olmadan da başarı olmaz 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.