Wordpress Mu yani çok kullanıcılı (kullanıcının kendine ait, istediği gibi düzenleyebileceği) blog sisteminin getirdiği bir sorundur bağlantı alt yapısında kendinden gelen /blog eki (Örnek: http://gkaans.org/blog/bir-yazi). Yalnız bu sadece ana blog’da sahip olunan bir ektir ki oluşturulan diğer bloglarda bu olmaz.
Örnek olarak gKAANs.oRg‘u incelediğimizde (Wordpress Mu altyapısını kullanır) yazı bağlantılarında /blog ekinin olmadığını göreceksiniz. Birazdan anlatacaklarımı doğru! uyguladığınız taktirde sorunsuz bir şekilde bu ekten kurtulacaksınız.

Resimdeki gibi kendi bağlantı yapısını istediğiniz gibi oluşturabilmenize rağmen Wordpress Mu sistemi (ana blog için) otomatik olarak /blog ekini ekliyor!
Yapılması Gerekenler
Yapacağımız değişiklik sadece wp-admin/options-permalink.php dosyasını kapsıyor.
Adım 1
Bu dosyayı bir editör ile açın ve
if ( isset($_POST['permalink_structure']) ) {
$permalink_structure = $_POST['permalink_structure'];
if (! empty($permalink_structure) )
$permalink_structure = preg_replace('#/+#', '/', '/' . $_POST['permalink_structure']);
if( constant( 'VHOST' ) == 'no' && $permalink_structure != '' && $current_site->domain.$current_site->path == $current_blog->domain.$current_blog->path ) {
$permalink_structure = '/blog' . $permalink_structure;
}
$wp_rewrite->set_permalink_structure($permalink_structure);
}
kodlarını bulun ve
if ( isset($_POST['permalink_structure']) ) {
$permalink_structure = $_POST['permalink_structure'];
if (! empty($permalink_structure) )
$permalink_structure = preg_replace('#/+#', '/', '/' . $_POST['permalink_structure']);
$wp_rewrite->set_permalink_structure($permalink_structure);
}
ile değiştirin.
Adım 2
if ( isset($_POST['category_base']) ) {
$category_base = $_POST['category_base'];
if (! empty($category_base) )
$category_base = preg_replace('#/+#', '/', '/' . $_POST['category_base']);
if( constant( 'VHOST' ) == 'no' && $category_base != '' && $current_site->domain.$current_site->path == $current_blog->domain.$current_blog->path ) {
$category_base = '/blog' . $category_base;
}
$wp_rewrite->set_category_base($category_base);
}
kodlarını bulun ve
if ( isset($_POST['category_base']) ) {
$category_base = $_POST['category_base'];
if (! empty($category_base) )
$category_base = preg_replace('#/+#', '/', '/' . $_POST['category_base']);
$wp_rewrite->set_category_base($category_base);
}
ile değiştirin.
Adım 3
if ( isset($_POST['tag_base']) ) {
$tag_base = $_POST['tag_base'];
if (! empty($tag_base) )
$tag_base = preg_replace('#/+#', '/', '/' . $_POST['tag_base']);
if( constant( 'VHOST' ) == 'no' && $tag_base != '' && $current_site->domain.$current_site->path == $current_blog->domain.$current_blog->path ) {
$tag_base = '/blog' . $tag_base;
}
$wp_rewrite->set_tag_base($tag_base);
}
kodlarını bulun ve
if ( isset($_POST['tag_base']) ) {
$tag_base = $_POST['tag_base'];
if (! empty($tag_base) )
$tag_base = preg_replace('#/+#', '/', '/' . $_POST['tag_base']);
$wp_rewrite->set_tag_base($tag_base);
}
ile değiştirin.
Adım 4
Yukarıdaki değişiklikler ile altyapıdaki değişikliği tamamladığımız. Şimdiki yapacaklarımız ise yönetici panelindeki /blog yazılarını silmek
Bulun:
<td>
<?php if( constant( 'VHOST' ) == 'no' && $current_site->domain.$current_site->path == $current_blog->domain.$current_blog->path ) { echo "/blog"; $permalink_structure = str_replace( "/blog", "", $permalink_structure ); }?>
<input name="permalink_structure" id="permalink_structure" type="text" class="code" style="width: 60%;" value="<?php echo attribute_escape($permalink_structure); ?>" size="50" />
</td>
ile değiştirin
<td>
<input name="permalink_structure" id="permalink_structure" type="text" class="code" style="width: 60%;" value="<?php echo attribute_escape($permalink_structure); ?>" size="50" />
</td>
Adım 5
Bulun:
<tr>
<th><label for="category_base"><?php _e('Category base'); ?></label></th>
<td><?php if( constant( 'VHOST' ) == 'no' && $current_site->domain.$current_site->path == $current_blog->domain.$current_blog->path ) { echo "/blog"; $category_base = str_replace( "/blog", "", $category_base ); }?> <input name="category_base" id='category_base' type="text" class="code" value="<?php echo attribute_escape( $category_base ); ?>" size="30" /></td>
</tr>
ile değiştirin
<tr>
<th><label for="category_base"><?php _e('Category base'); ?></label></th>
<td><input name="category_base" id='category_base' type="text" class="code" value="<?php echo attribute_escape( $category_base ); ?>" size="30" /></td>
</tr>
Adım 6 - Son Adım
Bulun:
<tr>
<th><label for="tag_base"><?php _e('Tag base'); ?></label></th>
<td><?php if( constant( 'VHOST' ) == 'no' && $current_site->domain.$current_site->path == $current_blog->domain.$current_blog->path ) { echo "/blog"; $tag_base = str_replace( "/blog", "", $tag_base ); }?> <input name="tag_base" id="tag_base" type="text" class="code" value="<?php echo attribute_escape($tag_base); ?>" size="30" /></td>
</tr>
ile değiştirin
<tr>
<th><label for="tag_base"><?php _e('Tag base'); ?></label></th>
<td><input name="tag_base" id="tag_base" type="text" class="code" value="<?php echo attribute_escape($tag_base); ?>" size="30" /></td>
</tr>
Sonuç Olarak

Bağlantılarımızda ve yönetim paneli bağlantı ayarlarında bulunan /blog ekini ortadan kaldırdık! Herhangi bir soru ve sorunu bana bildirdiğiniz taktirde yardım etmeye çalışacağım 
Blog dünyasını üzerine kurduğumuz bu iki en ünlü sistem bu seferki konumuz. Enine boyuna konuyu incelemeden önce bu konunun işlenmesi fikrini veren Volkan Görgülü‘ye teşekkürlerimi iletiyorum.
İki büyük sisteminden birbirinden güzel özellikleri var, ikiside ileri düzeyde gelişmiş kullanıcılarının sevgisini kazanmış sistemler. Peki iki sisteminde artıları eksileri neler?
- Eklentiler ile Gelişim (Wordpress): Bu büyük bir özelliktir ki eklentilerle Wordpress’i çok büyük ölçüde geliştirebilirsiniz. Mesela HeadSpace eklentisi ile kolayca blog’uın Meta Tag’larını özelleştirebilirsiniz. Halbuki Blogger’da bunu yapmanız hem zor hemde kod bilgisi gerektiren bir iştir.
- Geniş Tema Olanağı (Wordpress): Blogger’a nazaran Wordpress için gelişitirilmiş birçok tema bulunmaktadır. Ayrıca bu temaların yayınlandığı birçok ünlü website’si bulunmakta.
- İçe ve Dışa Aktarma Özelliği (Wordpress): Wordpress’te blogunuzun içeriğini (yazılar/yazarlar/eklentiler..) dışarıya aktarma özelliği ile başka bir yere taşıma/ekleme ayrıca yedek alma gibi özelliklere sahip oluyorsunuz. Bu özelliğin Blogger’da olmaması onu ciddi bir anlamda geriye bırakıyor.
- Sayfa Oluşturmak ve Kategoriler (Wordpress): Bir günlük için önemli iki unsurda Blogger tarafından şu anda desteklenmiyor, özel statik sayfalar oluşturamıyor ve yazılarınızı kategoriler altında toplayamıyorsunuz. Sadece Blogger tarafından etiketliyebiliyorsunuz.
- Permalink’leri Özelleştirebilmek (Wordpress): SEO açısından önemli rol oynayan bu özellik Blogger tarafından pekte güzel bir şekilde olmasada desteklenmiyor ve ayrıca özelleştirilemiyor. Ayrıca Türkçe karaktelerde sorun çıkabiliyor (Mesela: Kaan Şengül -> kaan-engl). Buna karşılık Wordpress Permalink konusunda çok gelişmiş. Özelleştirilmiş linkler oluşturabiliyorsunuz ve ayrıca Türkçe karakterde desteklenebiliyor.
- Index’lenme Süresi (Blogger): Blogger’a ait blog’unuz Google’ın sunucularında olması size daha çok avantaj sağlıyor. Diğer blog’ların (Blogger dışı) index’lenmesi uzun süre aldığı için Google Blogger sahiplerine bu güzelliği sunuyor.
- Güvenlik (Blogger): Güvenlik açısından Blogger kullanıcılarının çok avantajlara sahip olduğunu belirtmek isterim. Kesinlikle tam güvenlikli bir alanda blog’unuz yayınlanıyor ve Google güvencesi altında barınıyorsunuz. Sorun çıktığı anda sadece iletişim kurarak sorunu rahatça siz uğraşmadan halledebiliyorsunuz. Fakat sanmayınki Wordpress güvenli bir sistem değil!.. Kesinlikle güvenlik açısından gelişmiş ve geliştirilmeye açık bir sistem. Önceki yazılarımdada bu konuyu açmıştım [1] [2]. Sadece burdaki önemli nokta ipler ve sorumluluk sizde.
- Email İle Yazı Gönderimi (Blogger): Küçük bir özellikte olsa Wordpress’ten bir adım öne geçirilmiş bir özellik. Fakat bu adım sadece sıfırdan kurulmuş bir Wordpress’le karşılaştığında belli oluyor. Yalnız bu adımda 2.6 serisi ile artık arkaplanda kaldı.
Sonuç
Blogger gelişmiş bir sistem ama arayüzü ve basit olması blog dünyasına yeni giriş yapanlar için ideal fakar Wordpress geliştirilebilirliği ve dünya çağında geniş kullanıma ve verilen desteğe göre Blogger’ın çok üstünde bir sistem. Peki birde sizin düşüncelerinizi alalım, siz hangisini tercih ediyorsunuz, neden?
Birinci bölümde birçok güvenlik önlemlerinden bahsettik. Nasıl güvenli bir Wordpress’e sahip olacağımızı bir nebze anladık. Şimdi serinin ikinci ve son bölümü ile devam ediyoruz. Bu bölümdede önemli güvenlik bilgileri sizleri bekliyor.
Kullancı Güvenliği
Kullanıcı bilgilerinizin güvenliği blogunuzun güvenliği demektir. Bu bilgiler ne kadar ulaşılmaz ise blogunuz o kadar güvenlidir. Kullanıcı bilgileri adlı sözlüğü açmak gerekirse bu ikiye ayrılır:
Kullanıcı İsmini Değiştirmek
Wordpress kurulumu yapıldığında standart olarak kullanıcı ismi admin olarak atanır (her ne kadar kullanıcı ismi olarak blog içinde farklı isimde kullanabilsekte) ve bu yönetim panelinden değiştirilemez. Kullanıcı ismini database’den değiştirerek kolayca brute force’a karşı bir önlem almış oluruz. Peki nasıl değiştireceğiz?:
- Bir MySQL yönetim aracı ile (örneğin phpmyadmin) Wordpress’inizin kurulu olduğu database’i görüntüleyin.
- Bulunduğunuz database’de wp_users tablosunu (Not: wp ön takısı farklılık gösterebilir) seçin ve “Gözat” ‘a tıklayın.
- Buradan admin ‘i bulun ve “Düzenle”‘ye tıklayın.
- user_login sütunundaki admin ‘i değiştirin. Fakat bu tahmin edibelecek kolay bir isim olmasın.
Şifre Güvenliği
Sürekli duyduğumuz birşey “Güvenli şifreler kullanın”. Evet aynen öyle, olabildiğine uzun karmaşık şifreler kullanmak güvenliği üst düzeye çıkarır. Ayrıca büyük küçük harf kullanımı %&#$ gibi karakterler kullanımı üst düzey olan güveliği daha bir üst düzeye çıkarır. 4 karakter gibi bir şifre seçmeyin, seçtiğiniz şifreler isminizden doğum gününüzden ibaret olmasın. Wordpress’in kullanıcı yönetiminde bulunan şifre değiştirme kısmının altında şifre gücünü öğrenebileceğiniz küçük bir araç var. Göz ucuyla ne kadar güvenli bir şifrenizin olduğunu bir deneyin.
Arama Motorlarını Wordpress Klasörlerinden Uzak Tutmak
Wordpress klasöründe bulunan dosyalarınızın arama motorları tarafından hiç bir şekilde index’lenmesine gerek yok, sizde zaten kullandığınız eklentileri, versiyonunuzu (vs.) paylaşmak istemezsiniz. Bunun için Wordpress’in kurulu olduğu klasörde (eğer yoksa) robot.txt dosyası oluşturuyor (varsa altına ekliyoruz) ve alttaki tek satırlık kodu ekliyoruz:
Disallow: /wp-*
Yedek Almak
Yedek almak bilindiği üzere olası hatalardan yada kötü amaçlı kişilerin amaçlarına ulaştıktan sonra verdiği hasarlardan sitemizi yeniden kurtarabilmemizi sağlar. Yedeklerin güvenli bir yerde tutulması, alınan yedeklerinden hasarlardan nasibini almasını engeller. Mesela günlük yedek alarak bunları bir CD’ye yazdırmanız alınan yedeğin değiştirlmesini ve uzun süre korunmasını sağlar. MySQL yedeğinin yanında dosyaların yedeğini almayıda ihmal etmeyin.
WordPress Database Backup Eklentisi
Yedek alan eklentiler arasında en iyisi olan WordPress Database Backup, basit bir şekilde yedek almanızı sağlıyor. Hatta yedek alırken size 3 seçenek sunuyor:
- Yedek server’da mı depolansın?
- Yedeği bilgisayarınıza mı yüklemek istersiniz?
- Yoksa size email olarak mı atılsın?
Ayrıca bunlara ek olarak bir yedek alma takvimi belirleyip bu işi otomatik olarak eklentiye bırakabiliyorsunuz.
Diğer yardımcı güvenlik eklentileri
Şu ana kadar birçok bilgi ve eklenti ile güvenliğimizi arttırdık, bu arada kendimizide geliştirmiş olduk. Serinin son bölümünde yararlı diğer Wordpress güvenlik eklentilerini size tanıtacağım.
Semisecure Login
Bu eklenti Wordpress’e giriş yaparken girilen şifrenin gönderilmeden önce MD5 ile şifrelenerek sunucuya kontrol edilmesi için gönderiyor. MD5 ile şifrelemesinin nedeni network’ünüzde sizi takip eden birinin kolayca şifrenizi ele geçirmeyi engellemek.
Force SSL
Eklenti sayesinde HTTPS bağlantısı oluşturarak daha güvenli bir Wordpress sağlıyor. Fakat bunun sağlayıcınız tarafından desteklenmiş (SSL sertifikası gerekli) olması lazım.
WP Security Scan
WP Security Scan sizin için güvenlik taramaları yapıyor. Dosya izinlerini, şifreleri,database güvenliğini ve yönetim panelinin güvenliğini tehdit edebilecek bazı önlemlerin alınmadığını size belirtiyor ve basit bir şekilde daha güvenli bir sisteminiz olmasını sağlıyor.
Secure Wordpress
Bu eklentinin özellikleri arasında hata rapolarını (giriş yapılırken kaydedilen) silmek, wp-content/plugins klasörüne boş bir index.html dosyası ekleyerek eklentilerinizi gizlemek ve son olarak Wordpress versiyonunu kaldırmak bulunuyor.
WP-SpamFree
Bu eklenti Akismet gibi spam mailleri ayırt edip bunları uzak tutan bir eklenti.
Bitirirken
Yukarıda ve birinci bölümde anlatılan bir çok güvenlik önlemlerini öğrendik ve sistemimizi daha güvenilir yaptık. Uyarıları dikkate alın ve sisteminizi hep koruyun!
Ayrıca burayı sürekli takipte kalın ve bunun gibi, ilerde yayınlanacak diğere geliştirme araç ve dökümanlarını okuyun!
Bu yazı serisini yazarken yararlanılan kaynaklar
Wordpress her ne kadar gelişmiş güvenliğe sahipi sürekli güncel tutulan bir sistem olsada biz kullanıcıları tarafındanda alınması gereken birkaç önlem bulunmaktadır. İşte alınması gereken güvenliklerden birkaç tanesi:
Wordpress Versiyonunuzu Saklayın
Kullandığınız Wordpress’inizi ele geçirmek isteyen “hacker” ‘ların öncelikli bakacağı şey Wordpress sürümüdür. Çünkü mevcut sürümünüzü öğrenerek, o sürümde var olan açıklar ile sisteme sızmak kolay olabilir. Buna önlem olarak kullandığınız temada ki(header.php) alt yapının Wordpress olduğunu belirten ve sürümünü gösteren meta tag’ını şu şekilde düzenlememiz lazım:
Değiştirmeden önce elimizde olan kod:
<meta name="generator" content="WordPress <?php bloginfo('version'); ?>" />
Olması gereken hali:
<meta name="generator" content="WordPress" />
Replace WP-Version Eklentisi: Bu eklenti biraz önce yapmak istediğimizi kendisi yapabiliyor. Hatta database sürümünüde silebildiği diğer bir özelliği. Buyrun buradan deneyin.
wp-admin Klasörünü Korumak
Kötü niyetli kişilerin amaçlarından biride şifrenizi ele geçirerek Yönetici Paneli’ne ulaşıp buradan siteye hükmedebilmektir.
wp-admin klasörüne erişimi IP adresi ile engellemek
Bu yöntemde admin klasöründe oluşturacağımız .htaccess dosyası ile belirli bir IP adres(ler)ine erişim hakkı sağlayıp diğerlerinin erişimini engelleyeceğiz. Önemli Not: Düzenlenecek yada yeniden oluşturulacak .htaccess dosyası wp-admin klasörü içindeki olandır!
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "Example Access Control"
AuthType Basic
<limit GET>
order deny,allow
deny from all
allow from xx.xx.xx.xx
allow from xx.xx.xxx.xx
</limit>
Bu kodu .htaccess dosyasına ekleyin ve kaydedin. “allow from” karşılıklarına IP adreslerinin geleceklerini unutmayın. Bu şekilde birden fazla IP adresine hak tanıyabilirsiniz. IP adresinizi ise buradan öğrenebilirsiniz.
Login Lock Down eklentisi
Login Lock Down eklentisi admin paneline girişteki şifre ekranındaki başarısız girişlerin bir listesini tutar ve bu listede giriş yapmaya çalışan IP adreslerini ve zaman aralıklarını barındırır. Eğer belirlenen başarısız giriş sayısı aşılırsa giriş isteklerine bir süre cevap verilmemesini sağlar. Bu süreleri kendiniz istediğiniz gibi düzenleyebilirsiniz. Buradan eklentinin sayfasına gidebilir ve kullanmaya başlayabilirsiniz.
Güncel Kalın!
Sağlam ve güvenli bir sistem için her zaman geliştiricilerin yayınladığı son sürümleri takip edin. Gerek Wordpress sürümü, gerek eklenti ve tema güncellemelerini kullanın ve güncel kalın!
Wordpress Güncelliği
Bir alt yapı ne kadar güçlü olursa sistem o kadar güvenli çalışır ve o kadar canlı olur. Unutmayın her yeni yayınlanan sürümle beraber yeni güvenlik önlemleri alınır ve mevcut açıklar kapatılır. Siz bu yükseltmeleri yapmazsanız olası saldıralara karşı koyamazsınız.
Unutmayın: Wordpress 2.3‘ten beridir var olan özellikle her yeni Wordpress sürümünü yönteim panelinde bir uyarı kutucuğu ile öğrenebiliyoruz. Takipte kalın ve güncel olun! Wordpress’ini sürekli güncel tutabileceğiniz eklentiler:
- Instant Upgrade Eklentisi Basit birkaç adımda son sürüme/istediğiniz sürüme yükseltmeyi olanak sağlıyor. Fakat otomatik olarak yedek almıyor!
- Wordpress Automatic Upgrade Eklentisi Diğerinin aksine bu eklenti çok gelişmiş özellikleri ile sürüm yükseltme yapmanızı sağlıyor. Güncelleme yapılırken sitede bir mesaj göstermesi, eklentileri aktifsizleştirip yeni dosyaları yüklemesi ve yeniden aktifleştirmesi özellikleri arasında
Eklenti Güvenliği
Dikkat edilmesi gereken önemli bir unsur eklenti güvenliğidir. Çünkü eklentiler yayınlandıktan sonra farkedilen açık yada sorunlar bir alt sürümle yeniden yayınlanır ve bu eklentileri güncelleştirmek önemlidir! Bir çok saldırının güncel olmayan eklentiler ile başarıya ulaştığını unutmayın.
Sürekli güncellemelerden bahsettik ve bunun önemini vurguladık. Bir diğer unsur ise güvenilir olmayan eklentileri seçmeyin. Önceden araştırma yapın, eklenti için yapılan yorumlara bakın ve sonra o eklentiyi edinin.
Alacağımız önemli bir tedbir ise wp-content/plugins/ klasöründe bir boş index.html dosyası oluşturarak yüklü eklentilerin görünmesini engellemektir. “Hacker”‘lar kullandığınız eklentileri öğrenerek bunlarından açıklarından yararlanmak isteyecektir.
Tema Güncelliği
Tema’nın ne etkisi olabilir diye düşünmeyin. Tema sanatçısının eklediği bir özellik yada yanlış kullanılan bir PHP komutu bir açık yaratabilir. Yeni alt sürümlerle bunların önüne geçilmek istenilebilir, sizinde bu güncellemeleri takip etmeniz önerilir.
“wp-config.php” Güvenliği
Önemli bilgi ve şifrelerin saklandığı dosya olan wp-config.php güvenliği belki dikkate alınması en önemli unsurdur. Bunun için alınan çok basit bir önlem vardır, Wordpress’inizi kurduğunuz klasörün içindeki .htaccess (eğer kullanmıyorsanız oluşturunuz) dosyasının içine:
<filesMatch "wp-config.php[~]*">
<limit GET>
deny from all
</limit>
</filesMatch>
kodunu ekliyoruz ve erişimini dış unsurlara engelliyoruz. İşte bu kadar çok basit.
Son Olarak
Yukardaki anlatılanlarla bile şimdiden üst düzey bir güvenliğe sahip oldunuz. Bu yazı dizisinin ilk adımı işte bu satırlarda bitti. Bir diğer bölümün yayınlandığını öğrenmek için bizi RSS okuyucusuna ekleyin!
Yazılarımızdaki bir kelimeye bağlantı veririr ve okuyucumuzun onuda takip etmesini isteriz. Verdiğimiz bu bağlantı belki bir başka web sayfası olabilir belkide bir dosya! CSS ile istediğimiz dosya türüne belirleyecek simgeler ekleyebiliriz. Hadi başlayalım:
1. Adım: İlk önce genel olarak tüm linklere bir simge kullanalım. Biliyoruz ki bunun için <a> tagına CSS ile bir biçim tanımlamak:
a {
background:transparent url(images/link.png) no-repeat scroll right center;
padding-right:20px;
}
Burada “link.png” (
) adlı simgemizin yatay olarak sağ tarafta durmasını ve dikey olarak ortalamasını istedik (right center) ve sağ tarafta 20px’lik bir boşluk oluşturduk. Artık bütün linkler bu simgeye sahip olacak. Örnek için buraya bakabilirsiniz.
2. Adım: Bu adım çok kolay bir adım. Sadece özel bir CSS kodu ile uzantılı dosyaları özelleştirmeyi öğreneceğiz:
a[href$=".rar"] { /* .rar uzantılı dosyalar için özel simge koymak */
background-image:url(images/compress.png);
}
Yukarıdaki kod ile .rar uzantılı bir bağlantı oluşturulduğunda CSS ile ona “link.png”(
) simgesi yerine “compress.png”(
) simgesini kullanmasını söyledik. İşte buyrun kodlar nasıl çalışıyor.
Evet bu şekilde bir çok uzantıya değişik şeyler uygulayabiliriz. Tek yapılması gereken şey bu kodun doğru uygulanması. İyi çalışmalar 