Hosting hesabınızı aldınız, panele girdiniz ve karşınıza etc, logs, mail, public_ftp, ssl, tmp gibi bir sürü klasör çıktı. Elinizde bir index.html var ve tek sorunuz şu: bu dosyayı tam olarak nereye atacağım? Cevap neredeyse her Linux hostingte aynı: public_html. Bu klasör sitenizin web kökü, yani tarayıcıdan alanadiniz.com yazıldığında sunucunun bakmaya başladığı yerdir. Onun dışındaki hiçbir klasör internete açık değildir; oraya koyduğunuz dosya sunucuda durur ama hiçbir ziyaretçi göremez.
Bu yazıda public_html'in ne olduğunu, dosyalarınızı tam olarak hangi seviyeye koymanız gerektiğini, ek alan adı ve alt alan adı eklediğinizde klasörlerin nerede açıldığını, index.html ile index.php çakıştığında hangisinin çalıştığını, Windows hostingte karşınıza çıkan httpdocs/wwwroot farkını ve 755/644 izinlerinin neden bu sayılar olduğunu tek tek anlatacağım. Yıllardır destek taleplerinde gördüğüm en yaygın "sitem açılmıyor" nedeni karmaşık bir sunucu arızası değil, dosyaların bir klasör içeride ya da bir klasör dışarıda olmasıdır. Sonuna geldiğinizde bu hatayı bir daha yapmayacaksınız.
public_html Klasörü Nedir#
public_html, hosting hesabınızın web kökü (document root) olarak tanımlanmış klasörüdür. Apache veya LiteSpeed yapılandırmasında sitenizin sanal sunucu bloğu şuna benzer bir satır taşır:
<VirtualHost 203.0.113.10:80>
ServerName alanadiniz.com
ServerAlias www.alanadiniz.com
DocumentRoot /home/kullanici/public_html
</VirtualHost>
DocumentRoot satırındaki yol neyse, tarayıcıdaki / adresi oraya karşılık gelir. Yani /home/kullanici/public_html/hakkimizda.html dosyası alanadiniz.com/hakkimizda.html adresinden açılır. Bir dizin yukarısı olan /home/kullanici/ ise ev dizinidir (home directory) ve web'den erişilemez. Bu ayrım tesadüf değil, bilinçli bir güvenlik tasarımıdır: e-posta kutularınız, günlük dosyalarınız ve yedekleriniz ev dizininde durur ve kimse tarayıcıdan onlara ulaşamaz.
Ev dizininde tipik olarak gördüğünüz klasörler ve görevleri şöyledir:
| Klasör | Ne işe yarar | Web'den erişilir mi |
|---|---|---|
public_html | Sitenizin dosyaları; web kökü | Evet |
mail | E-posta kutularının fiziksel saklandığı yer | Hayır |
logs | Ham erişim ve hata günlükleri | Hayır |
etc | E-posta hesap tanımları, parola dosyaları | Hayır |
ssl | Sertifika ve özel anahtar dosyaları | Hayır |
tmp | Geçici dosyalar, istatistik önbellekleri | Hayır |
public_ftp | Anonim FTP için ayrılmış alan | Kısmen |
Bazı sunucularda public_html'in yanında www adında bir kısayol görürsünüz. Bu ayrı bir klasör değil, public_html'e işaret eden bir sembolik bağdır. İçine bir dosya koyarsanız public_html'e koymuş olursunuz; ikisi aynı yerdir. Bu yüzden "hem www hem public_html'e yükleyeyim, garanti olsun" demek gereksizdir ve çoğu zaman kafa karışıklığı yaratır.
cPanel'de public_html Nerede Bulunur#
public_html'e ulaşmanın en hızlı yolu Dosya Yöneticisi'dir. Adımlar şöyle:
- cPanel ana ekranında Dosyalar grubundaki Dosya Yöneticisi'ne (File Manager) tıklayın.
- Açılan pencerede sol taraftaki ağaçta ev dizininiz listelenir.
public_htmlklasörünü çift tıklayın. - Üstteki adres çubuğunda
/home/kullanici/public_htmlyolunu göreceksiniz. Doğru yerdesiniz.
Panelin Dosya Yöneticisi'ni ilk kez kullanıyorsanız cPanel dosya yöneticisi rehberindeki arayüz ayrıntıları işinizi kolaylaştırır.
FTP ile bağlandığınızda ise davranış hesabın nasıl açıldığına göre değişir. Ana FTP hesabıyla bağlanırsanız genellikle ev dizinine düşersiniz ve public_html'e çift tıklayarak girmeniz gerekir. cPanel'den oluşturduğunuz ek bir FTP hesabıyla bağlanırsanız, o hesabı oluştururken belirlediğiniz dizine kilitlenirsiniz; çoğu kişi bunu doğrudan public_html olarak ayarlar ve bağlanır bağlanmaz web köküne düşer. Bu yüzden "FTP'de public_html göremiyorum" diyen kullanıcıların büyük kısmı aslında zaten public_html'in içindedir. Emin olmak için tek yapmanız gereken bir dizin yukarı çıkmayı denemektir: çıkamıyorsanız kilitli bir hesapla bağlısınız demektir.
Site Dosyaları Hangi Klasöre Yüklenir#
Site dosyalarınız doğrudan public_html'in içine, alt bir klasör açmadan yüklenir. Yani hedeflenen yapı şudur:
public_html/
├── index.html
├── hakkimizda.html
├── style.css
├── img/
│ └── logo.png
└── .htaccess
Yaptığınız iş bir WordPress kurulumuysa wp-admin, wp-content, wp-includes klasörleri ve wp-config.php dosyası da yine doğrudan public_html içinde olmalıdır.
Buradaki klasik hata, bilgisayarınızda sitem adında bir klasörünüz olması ve o klasörü olduğu gibi yüklemenizdir. Sonuçta sunucuda şu yapı oluşur:
public_html/
└── sitem/
└── index.html
Bu durumda alanadiniz.com boş bir dizin listesi ya da "Index of /" ekranı verir; siteniz ancak alanadiniz.com/sitem/ adresinden açılır. Çözüm basittir: sitem klasörünün içeriğini seçip bir üst dizine taşıyın, sonra boşalan klasörü silin. Dosya Yöneticisi'nde bunu tümünü seç → Taşı (Move) → hedef yol olarak /public_html yazarak yapabilirsiniz.
Aynı hata ZIP yükleyip panelden çıkardığınızda da olur. Çoğu arşiv programı, klasörü sağ tıklayıp sıkıştırdığınızda arşivin içine bir kök klasör koyar. Arşivi public_html içinde açınca o kök klasör aynen oluşur ve dosyalar bir seviye içeride kalır. Arşiv oluştururken klasörün kendisini değil, klasörün içindeki tüm öğeleri seçip sıkıştırmak bu sorunu kökten çözer. Statik bir siteyi ilk kez yayına alıyorsanız html sitesi hostinge yükleme yazısındaki uçtan uca akış tam bu senaryoyu adım adım anlatır.
Ek Alan Adı ve Alt Alan Adı Klasörleri Nerede Açılır#
Tek hosting hesabında birden fazla site barındırdığınızda klasör yapısı ilk bakışta şaşırtıcı gelir, çünkü ikinci sitenin klasörü de varsayılan olarak public_html'in içinde açılır. cPanel bir ek alan adı (addon domain) eklerken size public_html/ikincisite.com gibi bir belge kökü önerir ve çoğu kişi bunu değiştirmeden onaylar.
| Alan adı tipi | Varsayılan klasör | Tarayıcıdan erişilen adres |
|---|---|---|
| Ana alan adı | public_html | anasite.com |
| Ek alan adı | public_html/ikincisite.com | ikincisite.com |
| Alt alan adı | public_html/blog | blog.anasite.com |
| Park edilmiş alan adı | Klasör açılmaz | Ana siteye yönlenir |
Bu yerleşimin bir yan etkisi vardır ve bilmeyenleri şaşırtır: ek alan adının klasörü ana sitenin web kökü içinde olduğu için, ikinci sitenin dosyalarına anasite.com/ikincisite.com/ adresinden de ulaşılabilir. Aynı içerik iki farklı adresten yayınlanır. Arama motorları açısından bu tekrar eden içerik demektir, güvenlik açısından ise ana sitenin yapılandırmasındaki bir kural ikinci siteyi de etkiler.
Bunu istemiyorsanız ek alan adını eklerken belge kökünü public_html dışına, ev dizininin altına alın: /home/kullanici/ikincisite.com gibi. Bu tamamen desteklenen bir yapılandırmadır ve iki siteyi birbirinden gerçekten ayırır. Zaten eklediğiniz bir alan adı için de belge kökünü sonradan değiştirebilirsiniz, ancak dosyaları yeni yola taşımayı unutmayın.
Alt alan adları içinse durum daha yumuşaktır; blog.anasite.com için açılan public_html/blog klasörü zaten aynı siteye ait bir bölüm olduğu için çift erişim genellikle sorun yaratmaz. Yine de yönetimi netleştirmek isteyenler için alt alan adı oluşturma yazısında klasör seçiminin ayrıntıları var.
index.html mi index.php mi Önce Çalışır#
Bir klasöre dosya adı vermeden girildiğinde sunucunun hangi dosyayı açacağını DirectoryIndex yönergesi belirler ve tipik sunucu yapılandırmasında index.html, index.php'den önce gelir. Yani public_html içinde hem index.html hem index.php varsa, ziyaretçi index.html görür.
Bu, WordPress kurulumlarında yılda birkaç kez karşıma çıkan bir soruna yol açar. Hosting hesabı açıldığında sağlayıcı çoğu zaman bir karşılama sayfası koyar; bu sayfa index.html adındadır. Siz WordPress'i kurarsınız, kurulum index.php oluşturur ama eski index.html yerinde durduğu için ziyaretçiler hâlâ "Sitenize hoş geldiniz" ekranını görür. WordPress panelinden her şey normal görünür, çünkü panel wp-admin/ üzerinden çalışır. Çözüm, eski index.html dosyasını silmek ya da index.html.eski gibi yeniden adlandırmaktır.
Sıralamayı bilerek değiştirmek isterseniz .htaccess dosyasına tek satır yeter:
DirectoryIndex index.php index.html anasayfa.html
Bu satır soldan sağa denenir: önce index.php aranır, yoksa index.html, o da yoksa anasayfa.html. cPanel'de aynı işi kod yazmadan yapmak isterseniz Index Manager ekranından bir klasör için dizin listeleme ve varsayılan dosya davranışını seçebilirsiniz. Bir klasörde hiçbir index dosyası yoksa ve dizin listeleme kapalıysa ziyaretçi 403 hatası alır; listeleme açıksa dosyalarınız tarayıcıda liste hâlinde görünür ki bu çoğu zaman istemediğiniz bir şeydir.
Windows Hosting'te httpdocs ve wwwroot#
Windows tabanlı hostingte web kökü public_html değildir ve bu, Linux'tan geçenlerin ilk takıldığı yerdir. Plesk yönetilen bir Windows hesapta klasör adı httpdocs, IIS'in kendi varsayılan yapısında ise wwwroot olur.
| Ortam | Web kökü | Tipik tam yol |
|---|---|---|
| cPanel / Linux | public_html | /home/kullanici/public_html |
| Plesk / Linux | httpdocs | /var/www/vhosts/alanadi.com/httpdocs |
| Plesk / Windows | httpdocs | C:\Inetpub\vhosts\alanadi.com\httpdocs |
| IIS varsayılan | wwwroot | C:\inetpub\wwwroot |
İsim dışında iki pratik fark daha vardır. Birincisi, Windows dosya sistemi büyük/küçük harf duyarsızdır; Logo.PNG ile logo.png aynı dosyadır. Linux'ta değildir. Bu yüzden Windows'ta çalışan bir siteyi Linux hostinge taşıdığınızda resimlerin bir kısmı kırılır — kod img/Logo.png ister ama dosya logo.pngdir. İkincisi, izin modeli tamamen farklıdır: Linux'un 755/644 sayıları yerine Windows'ta NTFS erişim denetim listeleri (ACL) kullanılır, dolayısıyla aşağıdaki chmod bölümü Windows hostingte geçerli değildir.
Klasör ve Dosya İzinleri: Neden 755 ve 644#
Linux hostingte standart izin şeması klasörler için 755, dosyalar için 644'tür. Bu sayılar keyfi değil; her biri üç haneli bir haktır ve sırasıyla sahip, grup, diğerleri anlamına gelir.
| İzin | Anlamı | Nerede kullanılır |
|---|---|---|
| 755 | Sahip: oku-yaz-çalıştır, diğerleri: oku-çalıştır | Klasörler |
| 644 | Sahip: oku-yaz, diğerleri: yalnız oku | HTML, PHP, CSS, resim dosyaları |
| 600 | Yalnız sahip okur ve yazar | wp-config.php gibi gizli yapılandırma |
| 777 | Herkes her şeyi yapabilir | Kullanmayın |
Klasörlerde "çalıştır" biti tuhaf görünür ama bir dizinde bu bit "içine girilebilir" anlamına gelir. 755 yerine 644 verdiğiniz bir klasörün içine web sunucusu giremez ve o klasördeki her şey 403 döner.
777 ise gerçek bir risktir. Paylaşımlı bir sunucuda 777 verilmiş bir klasöre, sizinle aynı makinede duran başka bir hesabın çalıştırdığı bir betik dosya yazabilir. Yıllardır gördüğüm zararlı yazılım bulaşmalarının önemli bir kısmı, "yükleme çalışmıyor" diye 777'ye çekilip sonra unutulmuş bir uploads klasöründen başlar. Yükleme sorunu neredeyse hiçbir zaman 777 gerektirmez; doğru çözüm dosya sahipliğini düzeltmektir.
cPanel'de izin değiştirmek için Dosya Yöneticisi'nde dosyayı seçip üst menüden İzinler (Permissions) düğmesine basmanız yeterlidir. SSH erişiminiz varsa tüm ağacı tek seferde düzeltmenin yolu şudur:
cd ~/public_html
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 600 wp-config.php
İlk komut tüm klasörleri, ikincisi tüm dosyaları düzeltir; üçüncüsü veritabanı parolasını taşıyan yapılandırma dosyasını daha da kısıtlar. İzin mantığının tamamı için linux dosya izinleri yazısına, WordPress'e özel istisnalar için wordpress dosya izinleri yazısına bakabilirsiniz.
public_html ile İlgili Sık Yapılan Hatalar#
public_html klasörünü silmek. Dosya Yöneticisi'nde "içindekileri temizleyeyim" derken klasörün kendisini silmek mümkündür ve site anında çalışmaz hâle gelir. Aynı adla yeni bir klasör oluşturmak çoğu zaman yetmez, çünkü yeni klasörün sahibi ve izinleri farklı olabilir. Böyle bir durumda klasörü elle oluşturduktan sonra izinleri 755 yapmak ve gerekirse sağlayıcıdan sahipliğin düzeltilmesini istemek gerekir.
Gizli dosyaların atlanması. .htaccess, .user.ini, .well-known gibi noktayla başlayan öğeler pek çok FTP istemcisinde ve arşivde varsayılan olarak görünmez. Sitenizi taşıdıktan sonra yönlendirmelerin, kalıcı bağlantıların ya da SSL doğrulamasının bozulmasının bir numaralı sebebi budur. Neyin taşınması gerektiğini site taşırken hangi dosyalar taşınır yazısında derli toplu bulabilirsiniz.
Büyük/küçük harf karışıklığı. Linux'ta Index.html ile index.html iki ayrı dosyadır. Yerelde çalışan sitenin sunucuda "sayfa bulunamadı" vermesinin sessiz nedeni çoğu zaman budur.
Yedekleri public_html içinde tutmak. yedek.zip dosyanızı web köküne bırakırsanız adresi tahmin eden herkes veritabanı parolanızı da içeren arşivi indirebilir. Yedekler ev dizininde, public_html dışında durmalıdır. Bir dizini gerçekten korumanız gerekiyorsa cPanel dizin parola koruma yöntemi doğru araçtır.
Siteyi Alt Klasörden Ana Dizine Taşıma#
Sitesi alanadiniz.com/site/ gibi bir adreste açılan çok sayıda kullanıcı görüyorum ve bunu düzeltmek göründüğünden kolaydır. İşlem üç adımdan oluşur: dosyaları taşımak, veritabanındaki adresi güncellemek ve eski adresten yeni adrese yönlendirme koymak.
- Dosyaları taşıyın. Dosya Yöneticisi'nde alt klasöre girin, gizli dosya gösterimini açın, tümünü seçin ve hedef yolu
/public_htmlvererek Taşı deyin. Boşalan klasörü silin. - Adresi güncelleyin. WordPress kullanıyorsanız
wp-config.phpdosyasına geçici olarak iki satır ekleyerek panele girebilir hâle gelirsiniz:
define('WP_HOME', 'https://alanadiniz.com');
define('WP_SITEURL', 'https://alanadiniz.com');
Panele girip Ayarlar → Genel ekranından adresleri kalıcı olarak kaydettikten sonra bu iki satırı silin. Veritabanında eski adresi geçen yazı içi bağlantılar ve resim yolları kalırsa bunları toplu arama-değiştirme ile düzeltmeniz gerekir; bu iş için hazırlanmış araçlar seri hâlde çalışırken serileştirilmiş verileri de bozmadan günceller.
- Yönlendirme koyun. Arama motorlarında ve dış bağlantılarda eski adres uzun süre yaşar.
.htaccessdosyasına tek satır kalıcı yönlendirme eklemek yeterlidir:
Redirect 301 /site/ https://alanadiniz.com/
Bu üç adımı yaptıktan sonra sitenizi gizli sekmede açıp birkaç iç sayfaya tıklayın. Adres çubuğunda hiçbir yerde eski klasör adının görünmemesi gerekir. Görünüyorsa büyük olasılıkla veritabanında güncellenmemiş bir bağlantı vardır.
Sıkça Sorulan Sorular#
public_html klasörünü göremiyorum ne yapmalıyım#
Büyük olasılıkla zaten içindesiniz. FTP hesabınız public_html'e kilitlenmiş olabilir; bu durumda bağlandığınız yer web kökünün kendisidir ve bir üst dizine çıkamazsınız. Kontrol etmek için bulunduğunuz dizinde wp-content ya da index.html gibi tanıdık öğeler olup olmadığına bakın. Dosya Yöneticisi'nde de göremiyorsanız gizli dosya gösterimini açın ve adres çubuğundaki yolu okuyun; /home/kullanici yazıyorsa klasör listede olmalıdır.
Dosyalarımı public_html içine mi yoksa altındaki bir klasöre mi koymalıyım#
Doğrudan public_html'in içine koymalısınız. Ana sitenizin index.html ya da index.php dosyası public_html'in ilk seviyesinde olmalıdır. Alt klasöre koyarsanız site yalnızca alanadiniz.com/klasoradi/ adresinden açılır. Tek istisna, aynı hesapta ikinci bir alan adı barındırıyor olmanızdır; o zaman ikinci sitenin kendi klasörü olur.
public_html içindeki dosyalara herkes erişebilir mi#
Evet, aksini belirtmediğiniz sürece public_html'e koyduğunuz her dosya internetten indirilebilir. Bu yüzden veritabanı yedekleri, müşteri listeleri, günlük dosyaları ve parola içeren metin dosyaları buraya konulmamalıdır. Bir bölümü kapatmanız gerekiyorsa dizin parola koruması, .htaccess erişim kuralı ya da dosyayı public_html dışına taşımak kalıcı çözümlerdir.
www klasörü ile public_html arasındaki fark nedir#
Fark yoktur; www çoğu cPanel hesabında public_html'e işaret eden bir sembolik bağdır. İkisinden hangisine dosya koyarsanız koyun aynı yere yazmış olursunuz ve dosya tek kopya olarak durur. Aynı dosyayı iki yere yüklemeye çalışmak gereksizdir; yalnızca public_html'i kullanmak en az kafa karıştıran yaklaşımdır.
index.php varken site hâlâ eski sayfayı gösteriyor neden#
Klasörde bir index.html dosyası kalmış olabilir, çünkü sunucu varsayılan sıralamada index.html dosyasını index.php dosyasından önce açar. Klasörü kontrol edin ve gereksiz index.html dosyasını silin ya da yeniden adlandırın. Sorun devam ediyorsa tarayıcı önbelleğini temizleyin ve sitenizde bir önbellek eklentisi ya da sunucu tarafı önbellek varsa onu da boşaltın.
Windows hostingte public_html neden yok#
Windows tabanlı hostingte web kökünün adı farklıdır; Plesk yönetilen hesaplarda httpdocs, doğrudan IIS yapılandırmalarında wwwroot klasörü kullanılır. İşlev aynıdır, yalnızca isim ve tam yol değişir. Ayrıca Windows'ta dosya adları büyük/küçük harf duyarsızdır ve izinler chmod yerine NTFS erişim listeleriyle yönetilir.
Klasör izinlerini 777 yaparsam sorunlar çözülür mü#
Hayır, 777 sorunu çözmez ve ciddi bir güvenlik riski yaratır. 777 verilmiş bir klasöre sunucudaki başka bir süreç dosya yazabilir; zararlı yazılım bulaşmalarının yaygın giriş noktalarından biri budur. Doğru şema klasörlerde 755, dosyalarda 644'tür. Yazma sorunu yaşıyorsanız neredeyse her zaman gerçek neden dosya sahipliğidir ve izin sayısını büyütmek yerine sahipliği düzeltmek gerekir.
Kapanış#
public_html, hosting hesabınızın internete açılan tek kapısıdır. Dosyalarınız bu klasörün ilk seviyesinde duruyorsa site açılır; bir klasör içeride kaldıysa "Index of /" ekranı görürsünüz; klasörün dışında kaldıysa hiç görünmezler. Ek alan adları varsayılan olarak public_html içinde açılır ve isterseniz bunu ev dizinine taşıyarak siteleri gerçekten ayırabilirsiniz. index.html dosyasının index.php dosyasını gölgelediğini, gizli dosyaların taşımalarda sessizce atlandığını ve 755/644 dışına çıkmanın çözüm değil sorun ürettiğini bilmek, ilk yayına alma sürecindeki hataların çoğunu baştan eler.
Bu yapıyı kendiniz kurmak yerine hazır gelmesini istiyorsanız, cPanel'li bir web hosting paketinde public_html, alan adı bağlantısı ve varsayılan izinler hesap açıldığı anda doğru şekilde hazırdır; kurumsal ölçekte birden çok siteyi tek panelden yönetecekseniz kurumsal hosting paketleri ek alan adı ve klasör ayrımı için daha geniş alan verir. Elinizde başka bir sağlayıcıda duran bir site varsa ve dosya yapısını bozmadan taşımak istiyorsanız site taşıma hizmeti bu işi izinleriyle, gizli dosyalarıyla birlikte üstlenir. Hangi paketin ihtiyacınıza uyduğuna karar veremiyorsanız hosting seçici aracıyla birkaç soruya cevap vererek yön bulabilirsiniz.