<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="tr"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="width=device-width, initial-scale=1" name="viewport">
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>Kimlik Doğrulama ve Yetkilendirme - Apache HTTP Sunucusu S&uuml;r&uuml;m 2.4</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet">
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size">
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css"><link rel="stylesheet" type="text/css" href="../style/css/prettify.css">
<script src="../style/scripts/prettify.min.js">
</script>

<link href="../images/favicon.png" rel="shortcut icon"></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">Mod&uuml;ller</a> | <a href="../mod/quickreference.html">Y&ouml;nergeler</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">SSS</a> | <a href="../glossary.html">Terimler</a> | <a href="../sitemap.html">Site Haritası</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Hata bildir</a></p>
<p class="apache">Apache HTTP Sunucusu S&uuml;r&uuml;m 2.4</p>
<img alt="" src="../images/feather.png"></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif"></a></div>
<div id="path">
<a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">HTTP Sunucusu</a> &gt; <a href="https://httpd.apache.org/docs/">Belgeleme</a> &gt; <a href="../">S&uuml;r&uuml;m 2.4</a> &gt; <a href="./">Nasıllar ve &Ouml;ğreticiler</a></div><div id="page-content"><div id="preamble"><h1>Kimlik Doğrulama ve Yetkilendirme</h1>
<button aria-label="Toggle language list" class="lang-toggle"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" stroke="currentColor" fill="none" viewBox="0 0 24 24" height="16" width="16"><circle r="10" cy="12" cx="12"/><line y2="12" x2="22" y1="12" x1="2"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></button>
<div class="toplang">
<p><span>Mevcut Diller: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../es/howto/auth.html" hreflang="es" rel="alternate" title="Espa&ntilde;ol">&nbsp;es&nbsp;</a> |
<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/howto/auth.html" title="T&uuml;rk&ccedil;e">&nbsp;tr&nbsp;</a></p>
</div>
<div class="outofdate">Bu &ccedil;eviri g&uuml;ncel olmayabilir. Son değişiklikler i&ccedil;in İngilizce s&uuml;r&uuml;m ge&ccedil;erlidir.</div>

    <p>Kimlik Doğrulama istediğiniz kişileri teyid etme işlemidir.
      Yetkilendirme ise kişilerin nereye gireceklerine ve hangi bilgiye
      ulaşacaklarına m&uuml;saade edilmesi işlemidir.</p>

    <p>Genel erişim denetimi i&ccedil;in <a href="access.html">Erişim Denetimi
      Nasıl</a> belgesine bakınız.</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif"> <a href="#related">İlgili mod&uuml;ller ve Y&ouml;nergeler</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#introduction">Giriş</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#theprerequisites">&Ouml;n gereksinimler</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#gettingitworking">&Ccedil;alışmaya Başlama</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#lettingmorethanonepersonin">Birden &ccedil;ok kişiye izin vermek</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#possibleproblems">Olası Sorunlar</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#dbmdbd">Diğer parola depolama y&ouml;ntemleri</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#multprovider">Birden &ccedil;ok tedarik&ccedil;i kullanmak</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#beyond">Yetkilendirmenin biraz &ouml;tesi</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#socache">Kimlik Doğrulama Arabelleği</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#moreinformation">Daha fazla bilgi</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="related">İlgili mod&uuml;ller ve Y&ouml;nergeler <a title="Permanent link" href="#related" class="permalink">&para;</a></h2>

    <p>Kimlik Doğrulama ve yetkilendirme işlemi ile ilgili &uuml;&ccedil; t&uuml;r mod&uuml;l
    vardır. Genellikle her bir gruptan en az bir mod&uuml;l se&ccedil;eceksiniz.</p>

    <ul>
      <li>Kimlik Doğrulama t&uuml;r&uuml; (bkz. <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> y&ouml;nergesi)
        <ul>
          <li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li>
          <li><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code></li>
        </ul>
      </li>

      <li>Kimlik Doğrulayıcı (bkz.
      <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
      ve <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code> y&ouml;nergeleri)
        <ul>
          <li><code class="module"><a href="../mod/mod_authn_anon.html">mod_authn_anon</a></code></li>
          <li><code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code></li>
          <li><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code></li>
          <li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li>
          <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li>
          <li><code class="module"><a href="../mod/mod_authn_socache.html">mod_authn_socache</a></code></li>
        </ul>
      </li>
      <li>Yetkilendirme (bkz.
          <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> y&ouml;nergesi)
        <ul>
          <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li>
          <li><code class="module"><a href="../mod/mod_authz_dbd.html">mod_authz_dbd</a></code></li>
          <li><code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li>
          <li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li>
          <li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li>
          <li><code class="module"><a href="../mod/mod_authz_owner.html">mod_authz_owner</a></code></li>
          <li><code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code></li>
        </ul>
      </li>
    </ul>

    <p>Bu mod&uuml;llere ek olarak, <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> ve
    <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> mod&uuml;lleri bulunur. Bu mod&uuml;ller
    yetkilendirme mod&uuml;llerinin &ccedil;ekirdeğini oluşturan temel y&ouml;nergeleri
    ger&ccedil;ekler.</p>

    <p><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> mod&uuml;l&uuml; kimlik doğrulama ve
    yetkilendirme işlemlerinin ikisini birden ger&ccedil;ekleştirir.
    <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> mod&uuml;l&uuml; bu işlemleri sunucu adına, IP
    adresine ve isteğin karekteristiğine bağlı olarak ger&ccedil;ekleştirir.
    Ancak kimlik doğrulama sisteminin bir par&ccedil;ası değildir.
    <code>mod_access</code> ile geriye uyumluluk i&ccedil;in
    <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> diye bir mod&uuml;l daha vardır.</p>

    <p>Muhtemelen g&ouml;z atmak isteyeceğiniz <a href="access.html">Erişim
    Denetimi</a> nasıl belgesi, sunucuya erişimlerin &ccedil;eşitli yollarından
    bahsetmektedir.</p>
  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="introduction">Giriş <a title="Permanent link" href="#introduction" class="permalink">&para;</a></h2>
    <p>Sitenizde sadece k&uuml;&ccedil;&uuml;k bir grup insana hitap eden ya da hassas
    bilgileriniz varsa, bu makaledeki teknikleri kullanarak dilediğiniz
    kişilerin sadece dilediğiniz sayfaları g&ouml;r&uuml;nt&uuml;lemesini
    sağlayabilirsiniz.</p>

    <p>Bu makale sitenizin bazı par&ccedil;alarını korumak i&ccedil;in kullanacağınız
    "standart" yolları i&ccedil;ermektedir.</p>

    <div class="note"><h3>Bilginize:</h3>
      <p>Eğer bilgileriniz ger&ccedil;ekten gizliliğe ihtiya&ccedil; duyuyorsa kimlik
      doğrulamasına ilaveten <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> mod&uuml;l&uuml;n&uuml; de
      kullanabilirsiniz.</p>
    </div>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="theprerequisites">&Ouml;n gereksinimler <a title="Permanent link" href="#theprerequisites" class="permalink">&para;</a></h2>
    
    <p>Bu makalede bahsi ge&ccedil;en y&ouml;nergeler ya ana sunucu yapılandırma
    dosyasında (genellikle <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> b&ouml;l&uuml;m&uuml;nde) ya da dizin i&ccedil;i
    yapılandırma dosyalarında (<code>.htaccess</code> dosyaları)
    bulunmak zorundadır.</p>

    <p>Eğer <code>.htaccess</code> dosyalarını kullanmayı
    tasarlıyorsanız, kimlik doğrulama y&ouml;nergelerine bu dosyaların i&ccedil;ine
    koymaya izin veren sunucu yapılandırmasına ihtiyacınız olacaktır.
    Bunun i&ccedil;in, dizin i&ccedil;i yapılandırma dosyalarının i&ccedil;ine hangi
    y&ouml;nergelerin konacağını belirleyen <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> y&ouml;nergesi kullanılır.</p>

    <p>Kimlik doğrulamadan s&ouml;zettiğimize g&ouml;re, aşağıda g&ouml;sterilen
    şekilde bir <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> y&ouml;nergesine ihtiyacınız olacaktır:</p>

    <pre class="prettyprint lang-config">AllowOverride AuthConfig</pre>


    <p>Y&ouml;nergeleri doğrudan ana sunucunun yapılandırma dosyasına
    koyacaksanız bu dosyaya yazma izniniz olmalıdır.</p>

    <p>Bazı dosyaların nerede saklandığını bilmek i&ccedil;in sunucunun dizin
    yapısı hakkında biraz bilgi sahibi olmanız gerekmektedir. Bu &ccedil;ok da
    zor olmamakla birlikte bu noktaya gelindiğinde konuyu
    netleştireceğiz.</p>

    <p>Ayrıca <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> ve
    <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> mod&uuml;lleri ya <code>httpd</code>
    &ccedil;alıştırılabilirinin i&ccedil;inde derlenmiş olmalı ya da
    <code>httpd.conf</code> yapılandırma dosyası ile y&uuml;klenmelidir. Bu
    iki mod&uuml;l HTTP sunucusunda kimlik doğrulama ve yetkilendirme
    kullanımı ve yapılandırması i&ccedil;in b&uuml;y&uuml;k &ouml;neme sahip temel y&ouml;nergeleri
    ve işlevselliği sağlar.</p>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="gettingitworking">&Ccedil;alışmaya Başlama <a title="Permanent link" href="#gettingitworking" class="permalink">&para;</a></h2>
    <p>Burada, sunucu &uuml;zerindeki bir dizini parolayla korumak i&ccedil;in
    gereken temel bilgiler verilecektir.</p>

    <p>İlk olarak bir parola dosyası oluşturmalısınız. Bunu nasıl
    yapacağınız, &ouml;zellikle, se&ccedil;tiğiniz kimlik doğrulayıcıya g&ouml;re
    değişiklik g&ouml;sterir. Bunun &uuml;zerinde ileride daha fazla duracağız.
    Başlangı&ccedil; i&ccedil;in parolaları bir metin dosyasında tutacağız.</p>

    <p>Bu dosya belge k&ouml;k dizini altında olmamalıdır. B&ouml;ylece başkaları
    parola dosyasını indiremezler. &Ouml;rneğin belgeleriniz
    <code>/usr/local/apache/htdocs</code> &uuml;zerinden sunuluyorsa parola
    dosyanızı <code>/usr/local/apache/passwd</code> dizininde
    tutabilirsiniz.</p>

    <p>Dosyayı oluşturmak i&ccedil;in Apache ile gelen
    <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> uygulamasını kullanacağız. Bu uygulama
    Apache'nin kurulumunda belirtilen  <code>bin</code> dizininde
    bulunur. Eğer Apache'yi &uuml;&ccedil;&uuml;nc&uuml; parti paketlerden  kurduysanız,
    &ccedil;alıştırılabilir dosyaların bulunduğu yollar &uuml;zerinde olmalıdır.</p>

    <p>Bir dosya oluşturmak i&ccedil;in şunları yazın:</p>

    <div class="example"><p><code>
      htpasswd -c /usr/local/apache/passwd/passwords umut
    </code></p></div>

    <p><code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> size parola soracaktır arkasından da
    teyit etmek i&ccedil;in parolayı tekrar girmenizi isteyecektir:</p>

    <div class="example"><p><code>
      # htpasswd -c /usr/local/apache/passwd/passwords umut<br>
      New password: parolam<br>
      Re-type new password: parolam<br>
      Adding password for user umut
    </code></p></div>

    <p>Eğer <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> normal yollar &uuml;zerinde değilse
    &ccedil;alıştırmak i&ccedil;in dosyanın bulunduğu tam yeri belirtmeniz
    gerekecektir. Dosyanın &ouml;ntanımlı kurulum yeri:
    <code>/usr/local/apache2/bin/htpasswd</code></p>

    <p>Bundan sonra, sunucuyu, parola sorması i&ccedil;in ve kimlerin erişim
    izni olacağını belirlemek i&ccedil;in yapılandıracaksınız. Bu işlemi
    <code>httpd.conf</code>dosyasını d&uuml;zenleyerek ya da bir
    <code>.htaccess</code> dosyası kullanarak yapabilirsiniz. &Ouml;rneğin,
    <code>/usr/local/apache/htdocs/secret</code> dizinini korumayı
    ama&ccedil;lıyorsanız, şu y&ouml;nergeleri kullanabilirsiniz. Bu y&ouml;nergeleri
    <code>/usr/local/apache/htdocs/secret/.htaccess</code> dosyası i&ccedil;ine
    veya <code>httpd.conf</code> i&ccedil;indeki &lt;Directory
    "/usr/local/apache/htdocs/secret"&gt; b&ouml;l&uuml;m&uuml;ne koyabilirsiniz.</p>

    <pre class="prettyprint lang-config">AuthType Basic
AuthName "Gizli Dosyalar"
# (Aşağıdaki satırın kullanımı isteğe bağlıdır)
AuthBasicProvider file
AuthUserFile "/usr/local/apache/passwd/passwords"
Require user umut</pre>


    <p>Bu y&ouml;nergeleri tek tek inceleyelim.
    <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> y&ouml;nergesi
    kullanıcının kimliğini doğrulamakta kullanılacak y&ouml;ntemi se&ccedil;er. En
    &ccedil;ok kullanılan y&ouml;ntem <code>Basic</code>'tir ve bu y&ouml;ntem
    <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> mod&uuml;l&uuml;yle ger&ccedil;eklenmiştir. Temel
    (<code>Basic</code>) kimlik doğrulamasıyla g&ouml;nderilen parolanın
    şifrelenmeyeceğini unutmayın. Bu y&ouml;ntem, bu sebepten dolayı
    <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> eşliğinde kullanılmadığı s&uuml;rece y&uuml;ksek
    hassasiyete sahip bilgiler i&ccedil;in kullanılmamalıdır. Apache bir başka
    kimlik doğrulama y&ouml;ntemini daha destekler: <code>AuthType
    Digest</code>. Bu y&ouml;ntem <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> tarafından
    ger&ccedil;eklenmişti ve &ccedil;ok daha g&uuml;venli olacağı d&uuml;ş&uuml;n&uuml;lm&uuml;şt&uuml;. Bu artık
    ge&ccedil;erliliğini yitirdiğinden bağlantının bundan b&ouml;yle
    <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> ile şifrelenmesi gerekmektedir.</p>

    <p><code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code> y&ouml;nergesi
    ile kimlik doğrulamada kullanılacak <dfn>Saha</dfn> da
    belirtilebilir. Saha kullanımının, başlıca iki işlevi vardır.
    Birincisi, istemci sıklıkla bu bilgiyi kullanıcıya parola diyalog
    kutusunun bir par&ccedil;ası olarak sunar. İkincisi, belirtilen kimlik
    doğrulamalı alan i&ccedil;in g&ouml;nderilecek parolayı belirlerken istemci
    tarafından kullanılır.</p>

    <p>&Ouml;rneğin, bir istemcinin <code>"Gizli Dosyalar"</code> alanında
    kimliği doğrulanmış olsun. Aynı sunucu &uuml;zerinde <code>"Gizli
    Dosyalar"</code> Sahası olarak belirlenmiş alanlarda aynı parola
    &ouml;zdevinimli olarak yinelenecektir. B&ouml;ylece parola bir kere girilerek
    aynı Sahayı paylaşan &ccedil;ok sayıda kısıtlanmış alana ulaşırken oluşacak
    gecikmeden kullanıcı korunmuş olur. G&uuml;venlik gerek&ccedil;elerinden dolayı,
    her sunucu adı değiştirilişinde istemcinin parolayı yeniden sorması
    gerekir.</p>

    <p><code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
    y&ouml;nergesinin &ouml;ntanımlı değeri <code>file</code> olduğundan, bu
    durumda, bu y&ouml;nergenin kullanımı isteğe bağlıdır. Ancak, eğer kimlik
    doğrulaması i&ccedil;in  <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> ya da
    <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> gibi farklı bir kaynak se&ccedil;ecekseniz
    bu y&ouml;nergeyi kullanmanız gerekecektir.</p>

    <p><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
    y&ouml;nergesi <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> ile oluşturduğumuz parola
    dosyasının yerini belirtmek i&ccedil;in kullanılır. Eğer &ccedil;ok sayıda
    kullanıcınız varsa her bir kullanıcıyı her kimlik doğrulama isteği
    i&ccedil;in kimlik bilgilerini bir metin dosyasında aramak gayet yavaş
    olacaktır. Apache, kullanıcı bilgilerini hızlı bir veritabanı
    dosyasında depolama &ouml;zelliğine de sahiptir. Bu ama&ccedil;la,
    <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> mod&uuml;l&uuml;n&uuml;n
    <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>
    y&ouml;nergesi kullanılabilir. Bu dosyalar <code class="program"><a href="../programs/dbmmanage.html">dbmmanage</a></code> ve
    <code class="program"><a href="../programs/htdbm.html">htdbm</a></code> programı ile oluşturulabilir ve değiştirilebilir.
    &Uuml;&ccedil;&uuml;nc&uuml; parti mod&uuml;llerinde &ccedil;ok sayıda
    başka kimlik doğrulama t&uuml;r&uuml; de vardır.</p>

    <p>Son olarak <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>
    y&ouml;nergesi, sunucunun bu b&ouml;lgesine erişimine izin verilen
    kullanıcıları ayarlama işleminin kimlik doğrulamasıyla ilgili
    kısmını sağlar. Bir sonraki b&ouml;l&uuml;mde <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> y&ouml;nergesini kullanmanın
    &ccedil;eşitli yoları &uuml;zerinde duracağız.</p>
  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="lettingmorethanonepersonin">Birden &ccedil;ok kişiye izin vermek <a title="Permanent link" href="#lettingmorethanonepersonin" class="permalink">&para;</a></h2>
    
    <p>Yukarıdaki y&ouml;nergelerle bir dizinde sadece bir kişiye
    (<code>umut</code> adlı kullanıcıya) izin verir. &Ccedil;oğunlukla birden
    &ccedil;ok kişiye izin verilmesi istenir. Bu durumda <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> y&ouml;nergesi
    devreye girer.</p>

    <p>Eğer birden &ccedil;ok kişiye izin vermek istiyorsanız i&ccedil;inde kullanıcı
    isimlerinin olduğu bir grup dosyası oluşturmalısınız. Bu dosyanın
    bi&ccedil;emi gayet basittir ve bunu herhangi bir metin d&uuml;zenleyici ile
    oluşturabilirsiniz. Bu dosyanın i&ccedil;eriği aşağıdaki gibi
    g&ouml;r&uuml;necektir:</p>

    <div class="example"><p><code>
     GroupName: umut samet engin kubilay
    </code></p></div>

    <p>Dosya, sadece, boşluklarla birbirinden ayrılmış gurup &uuml;yelerinin
    isimlerinden oluşan uzun bir liste i&ccedil;erir.</p>

    <p>Varolan parola dosyasına bir kullanıcı eklemek i&ccedil;in şunu
    yazın:</p>

    <div class="example"><p><code>
      htpasswd /usr/local/apache/passwd/passwords birey
    </code></p></div>

    <p>Evvelce almış olduğunuz yanıtı yine alacaksınız ama bu sefer yeni
    bir dosya oluşturulmak yerine var olan bir dosyaya eklenecektir.
    (Yeni bir parola dosyası oluşturmak i&ccedil;in <code>-c</code> se&ccedil;eneği
    kullanılır).</p>

    <p>Şimdi, <code>.htaccess</code> dosyanızı veya
    <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> b&ouml;l&uuml;m&uuml;n&uuml;z&uuml;
    aşağıda g&ouml;r&uuml;ld&uuml;ğ&uuml; şekilde değiştirebilirsiniz:</p>

    <pre class="prettyprint lang-config">AuthType Basic
AuthName "Davete Binaen"
# Satır isteğe bağlıdır:
AuthBasicProvider file
AuthUserFile "/usr/local/apache/passwd/passwords"
AuthGroupFile "/usr/local/apache/passwd/groups"
Require group Grupismi</pre>


    <p>Artık, <code>Grupismi</code> gurubunda listelenmiş ve
    <code>password</code> dosyasında kaydı olan kişiye, parolayı doğru
    yazdığı takdirde izin verilecektir.</p>

    <p>&Ccedil;oklu kullanıcıya izin veren biraz daha az kullanılan başka bir
    yol daha mevcuttur. Bir gurup dosyası oluşturmaktansa, şu y&ouml;nergeyi
    kullanabilirsiniz:</p>

    <pre class="prettyprint lang-config">Require valid-user</pre>


    <p><code>Require user umut</code> satırı ile parola dosyasında
    listelenmiş ve parolayı doğru olarak giren herhangi bir kişiye izin
    vermektense, her grup i&ccedil;in ayrı bir parola dosyası tutarak grup
    davranışını taklit edebilirsiniz.</p>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="possibleproblems">Olası Sorunlar <a title="Permanent link" href="#possibleproblems" class="permalink">&para;</a></h2>
    <p>Temel kimlik doğrulama yolu belirtildiği i&ccedil;in, sunucuya
    yaptığınız her belge istediğinde kullanıcı adınızın ve parolanızın
    doğrulanması gerekir. Hatta aynı sayfayı yeniden y&uuml;klerken ya da
    sayfadaki her bir resim i&ccedil;in bu yapılmalıdır (şayet korunmakta olan
    bir dizinden geliyorsa). Bu işlem hızı azaltacaktır. Yavaşlama
    miktarı parola dosyanızın b&uuml;y&uuml;kl&uuml;ğ&uuml; ile orantılı olacaktır, &ccedil;&uuml;nk&uuml; bu
    işlem sırasında dosya a&ccedil;ılacak ve kullanıcıların arasında isminiz
    bulunana kadar liste aşağı doğru taranacaktır. Bu işlem sayfa her
    y&uuml;klenişinde tekrar edilecektir.</p>

    <p>Buradan &ccedil;ıkacak sonu&ccedil;, bir parola dosyasına konulan kullanıcı
    sayısında bir &uuml;st sınır olması gerekliliğidir. Bu sınır sunucunuzun
    başarımına bağlı olarak değişiklik g&ouml;sterir. Bir ka&ccedil; y&uuml;z kayıtın
    &uuml;st&uuml;nde giriş yaptığınızda hız d&uuml;ş&uuml;ş&uuml;n&uuml; g&ouml;zlemlebilirsiniz İşte bu
    anda kimlik doğrulama i&ccedil;in başka bir y&ouml;ntem aramaya başlarsınız.</p>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="dbmdbd">Diğer parola depolama y&ouml;ntemleri <a title="Permanent link" href="#dbmdbd" class="permalink">&para;</a></h2>
    
    <p>Parolaları basit bir metin dosyasında depolamak yukarıda
    bahsedilen sorunlara yol a&ccedil;tığından parolaları başka bir yerde
    depolamayı d&uuml;ş&uuml;nebilirsiniz; &ouml;rneğin bir veritabanında.</p>

    <p><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> ve <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>
    mod&uuml;lleri bunu m&uuml;mk&uuml;n kılan iki mod&uuml;ld&uuml;r. Depolama y&ouml;nemi olarak
    <code><code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> file</code> yerine, <code>dbm</code>
    veya <code>dbd</code> kullanabilirsiniz.</p>

    <p>Bir metin dosyası yerine bir dbm dosyası kullanım &ouml;rneği:</p>

    <pre class="prettyprint lang-config">&lt;Directory "/www/docs/private"&gt;
    AuthName "Private"
    AuthType Basic
    AuthBasicProvider dbm
    AuthDBMUserFile "/www/passwords/passwd.dbm"
    Require valid-user
&lt;/Directory&gt;</pre>


    <p>Başka se&ccedil;enekler de m&uuml;mk&uuml;nd&uuml;r. Ayrınılar i&ccedil;in
    <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> belgesine başvurun.</p>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="multprovider">Birden &ccedil;ok tedarik&ccedil;i kullanmak <a title="Permanent link" href="#multprovider" class="permalink">&para;</a></h2>
    
    <p>Kimlik doğrulama ve yetkilendirme mimarisine dayalı yeni
    tedarik&ccedil;iyi kullanarak tek bir yetkilendirme ya da kimlik doğrulama
    y&ouml;ntemine kilitlenip kalmayacaksınız. Aslında birden &ccedil;ok tedarik&ccedil;i
    ihtiyacınıza cevap vermek i&ccedil;in bir arada kullanılabilir. Aşağıdaki
    &ouml;rnekte dosya ve LDAP tabanlı kimlik doğrulama tedarik&ccedil;ileri bir
    arada kullanılmıştır.</p>

    <pre class="prettyprint lang-config">&lt;Directory "/www/docs/private"&gt;
    AuthName "Private"
    AuthType Basic
    AuthBasicProvider file ldap
    AuthUserFile "/usr/local/apache/passwd/passwords"
    AuthLDAPURL ldap://ldaphost/o=yourorg
    Require valid-user
&lt;/Directory&gt;</pre>


    <p>Bu &ouml;rnekte dosya tedarik&ccedil;isi, ilk olarak kullanıcının kimliğini
    doğrulamaya teşebb&uuml;s edecektir. Kullanıcının kimliği
    doğrulanamıyorsa LDAP tedarik&ccedil;isi &ccedil;ağırılır. Eğer kurumunuz birden
    &ccedil;ok kimlik doğrulama tedarik&ccedil;isini y&uuml;r&uuml;rl&uuml;ğe koyuyorsa bu, kimlik
    doğrulama faaliyet alanının genişletilmesini sağlar. Diğer kimlik
    kanıtlama ve yetkilendirme senaryoları tek bir kimlik doğrulaması
    ile birden fazla yetkilendirme t&uuml;r&uuml;ne izin verebilir.</p>

    <p>&Ccedil;ok sayıda kimlik doğrulama tedarik&ccedil;isi uygulamaya konulabileceği
    gibi, &ccedil;ok sayıda yetkilendirme y&ouml;ntemi de kullanılabilir. Bu &ouml;rnekte
    dosya i&ccedil;in hem dosyalı hem de LDAP grup kimlik doğrulaması
    kullanılmıştır.</p>

    <pre class="prettyprint lang-config">&lt;Directory "/www/docs/private"&gt;
    AuthName "Private"
    AuthType Basic
    AuthBasicProvider file
    AuthUserFile "/usr/local/apache/passwd/passwords"
    AuthLDAPURL ldap://ldaphost/o=yourorg
    AuthGroupFile "/usr/local/apache/passwd/groups"
    Require group GroupName
    Require ldap-group cn=mygroup,o=yourorg
&lt;/Directory&gt;</pre>


    <p>Kimlik doğrulama konusunu biraz daha genişletirsek, <code class="directive"><a href="../mod/mod_authz_core.html#requireall">&lt;RequireAll&gt;</a></code> ve
    <code class="directive"><a href="../mod/mod_authz_core.html#requireany">&lt;RequireAny&gt;</a></code> gibi yetkilendirme taşıyıcısı
    y&ouml;nergelerle hangi iznin hangi sırayla uygulanacağını
    belirlenebilir. <a href="../mod/mod_authz_core.html#logic">Yetkilendirme Taşıyıcıları</a> b&ouml;l&uuml;m&uuml;nde bunun bir uygulama
    &ouml;rneğini g&ouml;rebilirsiniz.</p>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="beyond">Yetkilendirmenin biraz &ouml;tesi <a title="Permanent link" href="#beyond" class="permalink">&para;</a></h2>
    <p>Tek bir veri deposundan yapılacak tek bir sınamadan &ccedil;ok daha
    esnek kimlik doğrulaması yapılabilir. Sıralama, mantık ve hangi
    kimlik doğrulamasının kullanılacağını se&ccedil;mek m&uuml;mk&uuml;nd&uuml;r.</p>

    <h3 id="authandororder">Mantık ve sıralamanın uygulanması</h3>
      
      <p>Yetkilendirmenin hangi sırayla uygulanacağı ve nasıl
      denetleneceği ge&ccedil;mişte biraz gizemli bir konuydu. Apache 2.2'de,
      tedarik&ccedil;i tabanlı kimlik doğrulamasının devreye girmesiyle asıl
      kimlik doğrulama işlemini yetkilendirme ve destek işlevselliğinden
      ayırmak m&uuml;mk&uuml;n oldu. Bunun faydalarından birisi de kimlik
      doğrulama tedarik&ccedil;ilerinin yapılandırılabilmesi ve auth mod&uuml;l&uuml;n&uuml;n
      kendi y&uuml;kleme sırasından bağımsız olarak &ouml;zel bir sırayla
      &ccedil;ağrılabilmesidir. Bu tedarik&ccedil;i tabanlı mekanizmanın aynısı
      yetkilendirmeye de getirilmiştir. Bunun anlamı <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> y&ouml;nergesinde hangi
      izin y&ouml;nteminin kullanılması gerektiğinin belirtmesinin yanında
      hangi sırayla &ccedil;ağırılacaklarının da belirlenebildiğidir. &Ccedil;ok
      sayıda yetkilendirme y&ouml;ntemi kullanıldığında, bunlar, <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> y&ouml;nergelerinin
      yapılandırma dosyasında g&ouml;r&uuml;nd&uuml;kleri sıra ile &ccedil;ağırılır.</p>

      <p><code class="directive"><a href="../mod/mod_authz_core.html#requireall">&lt;RequireAll&gt;</a></code> ve <code class="directive"><a href="../mod/mod_authz_core.html#requireany">&lt;RequireAny&gt;</a></code> gibi yetkilendirme
      taşıyıcısı y&ouml;nergelerin devreye girmesiyle yetkilendirme
      y&ouml;ntemlerinin ne zaman &ccedil;ağırılacağı ve &ccedil;ağırıldığında ve erişime
      izin verirken hangi kuralların uygulanacağı konusunda denetim
      yapılandırmanın eline ge&ccedil;mektedir. Karmaşık yetkilendime mantığını
      ifade etmek i&ccedil;in kullanılan bir &ouml;rneği g&ouml;rmek i&ccedil;in
      <a href="../mod/mod_authz_core.html#logic">Yetkilendirme
      Taşıyıcıları</a> b&ouml;l&uuml;m&uuml;ne bakınız.</p>

      <p>&Ouml;ntanımlı olarak t&uuml;m <code class="directive"><a href="../mod/mod_authz_core.html#require">
      Require</a></code> y&ouml;nergeleri, <code class="directive"><a href="../mod/mod_authz_core.html#requireany">&lt;RequireAny&gt;</a></code>
      taşıyıcı y&ouml;nergesinin i&ccedil;ine konur. Başka bir deyişle eğer
      belirtilen kimlik doğrulama y&ouml;ntemlerinden herhangi biri başarılı
      olursa yetkilendirme de sağlanmış olur.</p>

    

    <h3 id="reqaccessctrl">Erişim denetimi i&ccedil;in yetkilendirme tedarik&ccedil;ilerinin
      kullanımı</h3>
      
      <p>Kullanıcı adı ve parolasına g&ouml;re kimlik doğrulama hikayenin
      sadece bir b&ouml;l&uuml;m&uuml;d&uuml;r. Sıklıkla insanlara kim olduklarına g&ouml;re
      değil birşeylere dayanarak izin vermek istersiniz. &Ouml;rneğin nereden
      geldikleri gibi.</p>

      <p><code>all</code>, <code>env</code>, <code>host</code> ve
      <code>ip</code> gibi yetkilendirme tedarik&ccedil;ileri ile, bir belgenin
      istendiği makinenin IP adresi veya konak ismi gibi bazı &ouml;zelliklerine
      dayalı olarak erişime izin verip vermeyeceğinizi belirtebilirsiniz.</p>

      <p>Bu tedarik&ccedil;ilerin kullanımı <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> y&ouml;nergesinde a&ccedil;ıklanmıştır. Bu y&ouml;nergeler,
      isteklerin işlenmesi sırasında yetkilendirme aşamasında
      &ccedil;ağırılacak yetkilendirme tedarik&ccedil;ilerini kayda ge&ccedil;irir. &Ouml;rneğin:
      </p>

      <pre class="prettyprint lang-config">Require ip <var>adres</var>
      </pre>


      <p>Burada, <var>adres</var> bir IP adresidir (veya kısmi bir IP
        addresidir)</p>

      <pre class="prettyprint lang-config">Require host <var>alan_adı</var>
      </pre>


      <p>Burada, <var>alan_adı</var> bir tam nitelikli alan adıdır
      (ya da kısmi alan adıdır); gerekirse &ccedil;ok sayıda alan adı veya IP
      adresi de belirtilebilir.</p>

      <p>&Ouml;rneğin, yorum alanını gereksiz iletilerle dolduran birini uzak
      tutmak istediğinizi varsayalım. Bu kişiyi uzak tutmak i&ccedil;in şunları
      yapabilirsiniz:</p>

        <pre class="prettyprint lang-config">&lt;RequireAll&gt;
    Require all granted
    Require not ip 10.252.46.165
&lt;/RequireAll&gt;</pre>


      <p>Bu adresden gelen ziyaret&ccedil;iler bu y&ouml;nergedeki i&ccedil;eriği
      g&ouml;remeyeceklerdir. Bunun yerine, elinizde IP adresi değil de
      makine adı varsa şunu kullanabilirsiniz:</p>

        <pre class="prettyprint lang-config">&lt;RequireAll&gt;
    Require all granted
    Require not host host.example.com
&lt;/RequireAll&gt;</pre>


      <p>Eğer alan adının tamanıdan gelecek olan b&uuml;t&uuml;n erişimleri
      engellemek isterseniz adresin ya da alan adının bir par&ccedil;asını
      belirtin:</p>

        <pre class="prettyprint lang-config">&lt;RequireAll&gt;
    Require all granted
    Require not ip 192.168.205
    Require not host phishers.example.com moreidiots.example
    Require not host ke
&lt;/RequireAll&gt;</pre>


        <p><code class="directive"><a href="../mod/mod_authz_core.html#requireall">&lt;RequireAll&gt;</a></code> y&ouml;nergesini &ccedil;ok sayıda
        <code class="directive"><a href="../mod/mod_authz_core.html#require">&lt;Require&gt;</a></code> y&ouml;nergesi ile birlikte kullanarak,
        sadece <code>not</code> ile olumsuzlanan t&uuml;m koşulları ger&ccedil;ekleyen
        bağlantılara erişim verilir. Başka bir deyişle, olumsuzlanan koşulları
        ger&ccedil;eklemeyen bağlantıların erişimi engellenir.</p>

    

    <h3 id="filesystem">Erişim denetimi ve geriye uyumluluk</h3>
      
      <p>Kimlik doğrulama i&ccedil;in tedarik tabanlı mekanizma kullanımının
      yan etkilerinden birisi,
      <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>,
      <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>,
      <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> ve
      <code class="directive"><a href="../mod/mod_access_compat.html#satisfy">Satisfy</a></code> erişim
      denetim y&ouml;nergelerine artık ihtiya&ccedil; duyulmamasıdır. Ancak eski
      yapılandırmalarla uyumluluğu sağlamak i&ccedil;in bu y&ouml;nergeler
      <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> mod&uuml;l&uuml;ne taşınmıştır.</p>

      <div class="warning"><h3>Note</h3>
        <p><code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> ile sağlanan y&ouml;nergelerin
        kullanımı artık &ouml;nerilmemekte, <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>
        mod&uuml;l&uuml;ndeki y&ouml;nergeler &ouml;nerilmektedir. <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>, <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code> veya <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> ile
        <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> gibi daha yeni
        olanlarının yenilerle karışık kullanımı teknik olarak m&uuml;mk&uuml;nse de
        &ouml;nerilmemektedir. <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> mod&uuml;l&uuml;, 2.4
        y&uuml;kseltmesini kolaylaştırmak i&ccedil;in sadece eski y&ouml;nergeleri i&ccedil;eren
        yapılandırmaları desteklemek &uuml;zere oluşturulmuştur.  Daha ayrıntılı
        bilgi i&ccedil;in <a href="../upgrading.html">y&uuml;kseltme</a> belgesine bakınız.
        </p>
      </div>
    

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="socache">Kimlik Doğrulama Arabelleği <a title="Permanent link" href="#socache" class="permalink">&para;</a></h2>
    <p>Zaman zaman kimlik doğrulama ağınızda veya sağlayıcı(ları)nızda kabul
    edilemez y&uuml;kler oluşturur. Bu &ccedil;oğunlukla <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>
    (veya &uuml;&ccedil;&uuml;nc&uuml; parti/&ouml;zel sağlayıcıların) kullanıcılarını etkiler. Bununla
    ilgilenmek i&ccedil;in httpd 2.3/2.4, kimlik bilgilerini arabelleklemek ve &ouml;zg&uuml;n
    sağlayıcıların y&uuml;klerini azaltmak i&ccedil;in yeni bir arabellekleme sağlayıcısı
    olarak <code class="module"><a href="../mod/mod_authn_socache.html">mod_authn_socache</a></code> mod&uuml;l&uuml; ile gelmektedir.</p>
    <p>Bu, bazı kullanıcılar i&ccedil;in &ouml;nemli bir başarım artışı sağlayabilir.</p>
  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="moreinformation">Daha fazla bilgi <a title="Permanent link" href="#moreinformation" class="permalink">&para;</a></h2>
    <p>Daha fazla bilgi i&ccedil;in <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ve
    <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> mod&uuml;llerinin belgelerine bakınız.
    <code class="directive"><a href="../mod/mod_authn_core.html#authnprovideralias">AuthnProviderAlias</a></code>
    y&ouml;nergesi ile bazı yapılandırmalarınızı basitleştirebilirsiniz.</p>

    <p>Apache tarafından desteklenen şifrelerle ilgili bilgi i&ccedil;in <a href="../misc/password_encryptions.html">Parola Bi&ccedil;emleri</a>
    belgesine bakınız.</p>

    <p><a href="access.html">Erişim Denetimi</a> nasıl belgesinden de
    bazı bilgiler edinebilirsiniz.</p>
  </div></div>
<div class="bottomlang">
<p><span>Mevcut Diller: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../es/howto/auth.html" hreflang="es" rel="alternate" title="Espa&ntilde;ol">&nbsp;es&nbsp;</a> |
<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/howto/auth.html" title="T&uuml;rk&ccedil;e">&nbsp;tr&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2026 The Apache Software Foundation.<br><a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> altında lisanslıdır.</p>
<p class="menu"><a href="../mod/">Mod&uuml;ller</a> | <a href="../mod/quickreference.html">Y&ouml;nergeler</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">SSS</a> | <a href="../glossary.html">Terimler</a> | <a href="../sitemap.html">Site Haritası</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Hata bildir</a></p></div><script><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
var langToggle = document.querySelector('.lang-toggle');
var topLang = document.querySelector('.toplang');
if (langToggle && topLang) {
    langToggle.addEventListener('click', function() { topLang.classList.toggle('open'); });
}
var qv = document.getElementById('quickview');
if (qv) {
    document.body.appendChild(qv);
    var qvBtn = document.createElement('button');
    qvBtn.className = 'qv-toggle';
    qvBtn.setAttribute('aria-label', 'Toggle page navigation');
    qvBtn.innerHTML = '&#9776;';
    document.body.appendChild(qvBtn);
    qvBtn.addEventListener('click', function() {
        var isOpen = qv.classList.toggle('open');
        if (isOpen) {
            qv.style.top = window.scrollY + 10 + 'px';
        }
    });
    window.addEventListener('scroll', function() { qv.classList.remove('open'); });
}
//--><!]]></script>
</body></html>