<-
Apache > HTTP Server > Documentation > Version 2.0 > How-To / Tutorials

Apache Tutorial: .htaccess files

.htaccess files provide a way to make configuration changes on a per-directory basis.

top

.htaccess dosyaları

top

Nedir / Nasıl kullanmalı

.htaccess (ya da "dağıtık yapılandırma dosyaları") her dizin için ayrı yapılandırma oluşturabilmemizi sağlar. Direktifler içeren bir .htaccess dosyası bir dizine yerleştirildiğinde, o direktifler yerleştirildiği dizine ve altdizinlere uygulanır.

Not:

.htaccess dosyanıza başka bir isim vermek isterseniz, AccessFileName direktifi içinde bu dosyanın adını belirtmelisiniz. Örneğin, bu dosyaya .config adını vermek isterseniz, sunucu yapılandırma dosyasına şu satırı eklemeniz gerekir:

AccessFileName .config

Genel olarak .htaccess dosyalarında ana yapılandırma dosyalarındaki format kullanılır. Yine bu dosyalara koyabileceğiniz direktifler,AllowOverride direktifiyle belirlenmektedir. Bu direktif, .htaccess dosyalarında bulunan kategorilerden hangilerinin işleme konulacağını belirler.

.htaccess dosyalarında kullanabilecek direktifler hakkında dokümanları incelemelisiniz. Direktiflerle ilgili bölümde "Şartlar" kısmında o direktifin nerelerde kullanılabileceği belirtilmiştir. Örneğin AddDefaultCharset direktifini incelerseniz, "şartlar" kısmında .htaccess dosyalarında kullanabileceğini göreceksiniz.

Örnek:

Şartlar: sunucu yapılandırması, virtual host, dizin, .htaccess
Override: FileInfo

Eğer bir direktifin .htaccess dosyalarında kullanılıp kullanılamayacağından emin değilseniz, dokümanlar içinde o komutu buluo "Şartlar"  satırında .htaccess olup olmadığına bakmalısınız.

top

Ne zaman .htaccess dosyalarını kullanmamalı?

Genel olarak, sunucu ana yapılandırma dosyalarına erişim hakkınız olmadıkça .htaccess dosyalarını kullanmamalısınız. Örneğin, kullanıcıların kimlik doğrulamasının herzaman .htaccess dosyaları vasıtasıyla yapıldığına dair yanlış bir inanç vardır. Kullanıcı kimlik doğrulaması yapılandırmasını sunucu ana yapılandırması içine koyabilirsiniz; aslında bu tercih edilen metod olmalıdır.

.htaccess dosyaları, içerik sağlayıcı dizin başına yapılandırma değişiklikleri yapmak zorunda olduğunda, ancak sunucunun kökünde -root- erişim hakkına sahip olmadığında kullanılmalıdır. Sunucu yöneticisi sık yapılandırma değişiklikleri yapmak istemiyorsa, her kullanıcının kendi dizinleri üzerindeki kontrollerini .htaccess dosyaları yoluyla düzenlemesine izin vermek akıllıca olacaktır. Bu durum, özellikle tek bir makinada birçok kullanıcıların sitelerinin tutulduğu ISP' ler için geçerlidir.

Öte yandan, mümkünse .htaccess dosyalarının kullanımından kaçınılmalıdır. Bir dizine .htaccess dosyası yerleştirerek yapabileceğiniz değişiklikleri, sunucunun ana yapılandırma dosyasında <Directory> kısmından da, üstelik daha etkili bir biçimde yapabilirsiniz.

.htaccess dosyası kullanımından kaçınmamız için 2 ana neden vardır:

Bunların ilki performanstır. AllowOverride ile .htaccess dosyalarının kullanımına izin verdiğimizde, Apache her dizinde .htaccess dosyası aramaya başlayacaktır. Kullansanız da, kullanmasanızda bu performans kaybı yaratır. Ayrıca unutmayınki sunucuya gelen her doküman isteme talebinde .htaccess dosyası o dokümanla birlikte yüklenecektir.

<>Apache, her seferinde .htaccess dosyalarını belirtilen dizinin üstündeki dizinlerde de aramaktadır. Burada amaç; üst dizinlerden gelen direktifleri de değerlendirerek uygulanacak direktifleri belirlemektir ( Direktifler nasıl uygulanır bölümüne bakabilirsiniz). Örneğin, /www/htdocs/example dizininden bir dosya istendiğinde Apache şu dosyaları arar:

/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess

Burada, dosyalar mevcut olmasa dahi, dizindeki her dosyaya erişim için yukarıda görüldüğü gibi 4 ayrı dizinde .htaccess dosyası aranmaktadır.

İkinci neden güvenliktir.  Kullanıcılara vermeniz gereken izinlerin miktarı kritiktir: Eğer sunucu yapılandırmasını değiştirmelerine izin verirseniz, değişiklikler kontrolünüzden çıkabilir. Eğer yeteri kadar izin vermezseniz teknik destek talepleri artacaktır. AllowOverride ' ın dikkatlice kullanımı ve yeterli bir dokümantasyon  sayesinde birçok karmaşık durumun önüne geçilebilir.

<>/www/htdocs/example dizinine bir .htaccess dosyası koymakla, ana sunucu yapılandırmasında Directory bölümünde <Directory /www/htdocs/example> direktifinin kullanılması tamamen aynı etkiyi yaratacaktır.

/www/htdocs/example içindeki .htaccess dosyası:

AddType text/example .exm

httpd.conf dosyanızdaki ilgili bölüm:

<Directory /www/htdocs/example>
AddType text/example .exm
</Directory>

Ancak, bu işlemi .htaccess dosyası kullanmak yerine ana yapılandırma dosyasında yapmak sadece Apache başlarken performans kaybı yaratır; öte yandan .htaccess kullandığınızda her dosya talebinde ek bir yük oluşacaktır.

 .htaccess dosyalarının kullanımı AllowOverride directifi none ile kullanılarak engellenebilir:

AllowOverride None

top

Direktifler nasıl uygulanır

Bir .htaccess dosyası içinde bulunan çeşitli yapılandırma direktifleri, o dosyanın bulunduğu dizine ve o dizinin altındaki dizinlere uygulanır. Ancak, gözden kaçırılmaması gereken önemli bir nokta, daha üst dizinlerde bulunan .htaccess dosyaları içindede çeşitli direktifler bulunabileceğidir. Direktifler bulundukları sıraya göre uygulanırlar. Bu sebeple, bir dizin içinde bulunan .htaccess dosyasındaki direktifler, daha üst dizinlerdeki .htaccess dosyalarının direktiflerini "ezer". Hatta silsile yolu ile ana sunucu yapılandırma dosyası ayarları bile geçersiz kılınabilir.

Örnek:

 /www/htdocs/example1 dizinindeki .htaccess dosyasında şu satır bulunmaktadır:

Options +ExecCGI

(Not:  "Options" direktifini .htaccess dosyalarında kullanabilmek için "AllowOverride Options" ifadesi kullanılmış olmalıdır.)

 /www/htdocs/example1/example2 dizinindeki .htaccess dosyasında şu satır bulunmakta:

Options Includes

/www/htdocs/example1/example2 dizininde bulunan 2. .htaccess dosyasından ötürü, CGI çalıştırılmasına izin verilmemiştir; çünkü Options Includes ifadesiyle önceki ayarları etkisiz kılmıştır.

top

Kimlik doğrulama örneği

Eğer kimlik doğrulamasının nasıl yapıldığını bulmak için dokümanın direk bu noktasına atladıysanız, birşeye dikkat etmelisiniz: Parola korumalı kimlik doğrulaması oluşturmak için .htaccess dosyaları gerektiği gibi yanlış bir genel kanı bulunmaktadır. Bu yanlıştır. Sunucunun ana yapılandırma dosyasında <Directory> bölümüne kimlik doğrulama direktifleri koymak tercih edilmesi gereken yöntemdir; ancak bu dosyaya erişiminiz yoksa .htaccess dosyalarını kullanmalısınız. (bknz."Ne zaman .htaccess kullanmamalı)

<>Eğer hala .htaccess dosyalarını kullanmayı düşünüyorsanız, şu yapılandırma işinizi görecektir:

Bu direktiflerin etkili olabilmesi için AllowOverride authconfig direktifinin o dizin için uygulamada olması gerekmektedir.

.htaccess dosyası içeriği:

AuthType Basic
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins


Please see the authentication tutorial for a more complete discussion of authentication and authorization.

top

SSI örneği

Diğer bir yaygın .htaccess dosyası kullanımı; belli bir dizinde SSI' a izin vermek amaçlıdır. Bu, istenen dizindeki .htaccess dosyasına aşağıdaki yapılandırma direktiflerini yazarak yapılabilir:

Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml

Bu direktiflerin etkili olabilmesi için hem AllowOverride Options, hem de AllowOverride FileInfo direktiflerinin o dizin için uygulamada olması gerekmektedir.

Please see the SSI tutorial for a more complete discussion of server-side includes.

top

CGI example

Son olarak, .htaccess dosyalarını belli bir dizindeki CGI programlarının çalıştırılmasına izin vermek için kullanabilirsiniz. Şu yapılandırmayı uygulayın;

Options +ExecCGI
AddHandler cgi-script cgi pl

Eğer sözkonus dizindeki tüm dosyaların  CGI programı gibi değerlendirilmesini istiyorsanız, aşağıdaki yapılandırmayı kullanın:

Options +ExecCGI
SetHandler cgi-script

Bu direktiflerin etkili olabilmesi için hem AllowOverride Options, hem de AllowOverride FileInfo direktiflerinin o dizin için uygulamada olması gerekmektedir.

Please see the CGI tutorial for a more complete discussion of CGI programming and configuration.

top

Sorun giderme

.htaccess dosyalarında uyguladığınız yapılandırma direktifleri işe yaramıyorsa, bunun birçok nedeni olabilir:

En yaygın sorun, AllowOverride direktifinin yapılandırma dosyalarınızdaki gerekli işlemlere izin verecek şekilde ayarlanmamasından kaynaklanır. Özellikle AllowOverride None ifadesini kullanmadığınızdan emin olun. .htaccess dosyası içine hatalı ifadeler yazıp tekrar yüklemek iyi bir test biçimidir. Eğer bir sunucu hatası almadıysanız, çok yüksek ihtimal AllowOverride None direktifi bu dizin için geçerlidir.

Eğer dokümanlara ulaşmaya çalıştığınızda sunucu hatası alıyorsanız, Apache hata jurnalini (error log dosyası) kontrol edin. Muhtemelen size .htaccess dosyası içinde kullandığınız bir direktife izin verilmediğini gösterecektir. Aynı yöntemi, yazım hatalarını tespit etmek için de kullanabilirsiniz.