.htaccess dosyası, Apache web sunucusu tarafından kullanılan bir yapılandırma dosyasıdır. Bu dosya, web sunucunuzun davranışını değiştirmek veya özelleştirmek için kullanılır. .htaccess dosyası, genellikle web sitesinin kök dizininde bulunur ve dosya adının başındaki nokta (.) ile başlar.
.htaccess dosyasının yanlış yapılandırılması web sitesinin çalışmasını etkileyebilir ve hatalara neden olabilir. Bu yüzden bu dosyayı düzenlerken dikkatli olmak önemlidir.
.htaccess dosyası ile yapılabilecek işlemlerden bazıları aşağıda gösterilmektedir:
İçinde index.php veya index.html olmayan bir dizinin içeriğini listelemeyi engellemek için aşağıdaki komutu kullanabiliriz:
# Dizin içeriği listelemeyi engelleme
Options -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]
.htaccess dosyasını alt dizinlerde tanımladığınızda, tanımlı olduğu dizinin altındaki dizinler için aynı kurallar geçerlidir.
Arama motorları tarafından yapılan aramaların daha verimli bir sonuç vermesi için, web tarayıcı satırından girilen tüm değerlerin ana dizinde index.php dosyasına yönlendirilerek, bir web sitesinin SEO uyumlu olması sağlanabilir.
# Web sitesinde dizin listelemeyi engelleme
Options -Indexes
# RewriteEngine'i açma işlemi
RewriteEngine On
# Tarayıcıda belirtilen isme sahip dizin mevcut değilse, aşağıdaki RewriteRule satırına geçin.
RewriteCond %{REQUEST_FILENAME} !-d
# Tarayıcıda belirtilen isme sahip dosya mevcut değilse, aşağıdaki RewriteRule satırına geçin.
RewriteCond %{REQUEST_FILENAME} !-f
# Gelen tüm istekleri ana dizinde bulunan index.php dosyasına yönlendirme
RewriteRule ^(.*)$ index.php/$1 [L]
Kalıcı olarak gerçekleştirilen URL yönlendirmeleridir.
Web tarayısından yapılan girişlerin hepsini başlangıcında "www" bulunmayan site adresine yönlendirme
RewriteEngine On
# Sadece site adı (mysite.com) ile giriş yapılmışsa
RewriteCond %{HTTP_HOST} ^mysite.com [NC, OR]
# www ile başlayarak (www.mysite.com) giriş yapılmışsa
RewriteCond %{HTTP_HOST} ^www.mysite.com [NC]
# Yukarıda yapılan girişleri http://mysite.com/ adresine yönlendirme
RewriteRule ^(.*)$ https://mysite.com/$1 [L, R=301, NC]
NC: Non case (Büyük küçük harf duyarsız) OR: Veya R: Yönlendirme (Redirect) L: Bundan sonraki işlem satırlarını dikkate alma
Siteyi yeni bir siteye yönlendirme
RewriteEngine On
# Siteyi yeni bir siteye yönlendirme
Redirect 301 https://mynewsite.com [NC, L]
Site içeriklerinin başka sitelerde kullanılmasını engellemek için hotlink yöntemi kullanabiliriz. Böylece, bant genişliğimizin diğer web siteleri tarafından kullanılmasını engelleyebiliriz.
Belirli uzantılara sahip dosyaların sitemizin adresi üzerinden paylaşılmasını engellemek için aşağıdaki satırları kullanabiliriz:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)? mysite.com/.*$ [NC]
RewriteRule \. (png|gif|jpg|jpeg|zip|mp3|mp4|xml|php|css|pdf)$ - [F]
Belirli IP adreslerine izin vermek için Allow komutu, engellemek için Deny komutu kullanabiliriz.
Aşağıdaki satırlar, istek gönderen tüm adreslere izin verir. Sadece, 121.121.121.121 adresinden gelen isteği engeller.
Order Allow, Deny
Allow from all
Deny from 121.121.121.121
Aşağıdaki satırlar, istek gönderen tüm adresleri engeller. Sadece, 121.121.121.121 adresinden gelen isteğe izin verir.
Order Allow, Deny
Deny from all
Allow from 121.121.121.121
Apache Server 2.4 sürümünde kullanılan ve buradan detaylı bilgilerine erişim sağlayabileceğiniz RewriteRule bayrakları (Flags) ile ilgili özet bilgiler aşağıdaki tabloda gösterilmektedir:
Flag | Açıklama | Flag | Açıklama |
---|---|---|---|
B | RewriteRule'a dönüşümü uygulamadan önce alfasayısal olmayan karakterlerden kaçınması talimatını verir. | N | next | Kural kümesinin o ana kadarki sonucunu bir başlangıç noktası olarak kullanarak, kural kümesinin en baştan başlamasını sağlar. Döngüye neden olabileceği için çok dikkatli kullanılmalıdır. |
BNP | RewriteRule'a geri referanstaki boşluk karakterini '+' yerine %20'ye çıkarması talimatını verir. Sorgu dizesi yerine yol bileşeninde geri referans kullanılacaksa kullanışlıdır. | NC | nocase | RewriteRule'un büyük/küçük harfe duyarlı olmayan bir şekilde işlem yapmasını sağlar. Bu durumda, eşleşen URI'de harflerin büyük veya küçük harf olarak görünmesi arasında fark yoktur. |
BCTLS | [B] bayrağına benzer, ancak yalnızca kontrol karakterlerini ve boşluk karakterini, diakkate almaz. Bu, sorgu dizesine kodlanmamış olarak kopyalandıklarında reddedilen karakter kümesinin aynısıdır. | NE | noescape | Ön tanımlı olarak, & ve ? gibi özel karakterler, harici yönlendirmelerle sonuçlanan kurallar için onaltılık kod eşdeğerlerine dönüştürülür. [NE] bayrağı bu dönüştürmeyi önler. |
BNE | İçindeki karakterlerin listesi, [B] veya [BCTLS] bayraklarının karakterlerinin hariç tutulması olarak değerlendirilir. Listelenen karakterlerden dikkate alınmayacaktır. | NS | nosubreq | Kuralın alt isteklerde kullanılmasını engeller. |
C | chain | RewriteRule'un bir sonraki kurala bağlandığını gösterir. Yani kural eşleşirse her zamanki gibi işlenir ve kontrol bir sonraki kurala geçer. Ancak eşleşmiyorsa sonraki kural ve birbirine zincirlenen diğer kurallar devre dışı kalır. | P | proxy | İsteğin mod_proxy tarafından ve bir proxy isteği aracılığıyla işlenmesini sağlar. |
CO | cookie | Belirli bir RewriteRule eşleştiğinde bir çerez ayarlanmasına olanak tanır. | PT | passthrough | RewriteRule'daki hedefin (veya ikame dizesinin) varsayılan olarak bir dosya yolu olduğu kabul edilir. [PT] bayrağının kullanılması bunun yerine URI olarak değerlendirilmesini sağlar. |
DPI | discardpath | Yeniden yazılan URI'nin PATH_INFO kısmının atılmasını sağlar. | QSA | qsappend | Değiştirme URI'si bir sorgu dizesi içerdiğinde, RewriteRule'un varsayılan davranışı mevcut sorgu dizesini atmak ve onu yeni oluşturulan sorgu dizesiyle değiştirmektir. [QSA] bayrağının kullanılması sorgu dizelerinin birleştirilmesini sağlar. |
E | env | Bir ortam değişkeninin değerini ayarlayabilir. | QSD | qsdiscard | İstenen URI bir sorgu dizesi içerdiğinde ve hedef URI içermediğinde, RewriteRule'un varsayılan davranışı, bu sorgu dizesini hedef URI'ye kopyalamaktır. [QSD] bayrağının kullanılması sorgu dizesinin atılmasını sağlar. |
END | Mevcut yeniden yazma işlemini ([L] gibi) sonlandırır, aynı zamanda dizin bazında (htaccess) daha sonraki yeniden yazma işlemlerinin gerçekleşmesini de engeller. | QSL | qslast | Ön tanımlı olarak, değişiklikteki ilk (en soldaki) soru işareti, yolu sorgu dizesinden ayırır. [QSL] bayrağını kullanmak, RewriteRule'a bunun yerine son (en sağdaki) soru işaretini kullanarak iki bileşeni bölmesi talimatını verir. |
F | forbidden | Sunucunun istemciye 403 Yasak durum kodunu döndürmesine neden olur. Aynı davranış Deny yönergesi kullanılarak da gerçekleştirilebilirken, bu durum Yasak durumu atamada daha fazla esneklik sağlar. | R | redirect | Karakter |
G | gone | Sunucuyu yanıtla birlikte "410 Gone status" döndürmeye zorlar. Bu, bir kaynağın önceden mevcut olduğunu ancak artık mevcut olmadığını gösterir. | S | skip | Çalıştırılmak istenmeyen kuralları atlamak için kullanılır. Atlama bayrağının sözdizimi [S=N] şeklindedir; burada N, atlanacak kural sayısını belirtir. |
H | handler | Ortaya çıkan isteği belirtilen işleyiciyle işlenmeye zorlar. | T | type | Ortaya çıkan yanıtın gönderileceği MIME türünü ayarlar. AddType yönergesiyle aynı etkiye sahiptir. |
L | last | [L] bayrağı mod_rewrite'ın kural kümesini işlemeyi durdurmasına neden olur. Kuralın devreye girmesi durumunda başka kuralın çalışmayacağı anlamına gelir. Geçerli kuralın, başka kurallar dikkate alınmadan hemen uygulanması gerektiğinde kullanılır. |
Karakter | Açıklama |
---|---|
# | Sunucu satıra herhangi bir işlem yapmaz. Yorum satırıdır. |
[xyz] | Köşeli parantez içindeki herhangi bir karakter eşleşecektir. Örneğin, "[xyz]" x, y veya z karakterlerinden herhangi biriyle eşleşecektir. |
[xyz]+ | Parantez içindeki öğelerin herhangi bir kombinasyonunun eşleşeceği karakter sınıfı. Örneğin, "[xyz]+" herhangi bir sayıda x, y, z veya bunların herhangi bir kombinasyonuyla eşleşecektir. |
[^xyz] | Bir karakter sınıfının içinde değil. Örneğin, [^xyz] x, y veya z dışındaki herhangi bir karakterle eşleşecektir. |
[a-z] | Bir karakter sınıfındaki iki karakter arasındaki kısa çizgi “-” karakter aralığını belirtir. Örneğin, [a-zA-Z] tüm küçük ve büyük harfleri içerir. |
a{n} | n sayısı kadar a sayısını gösterir. Örneğin x{3} tam olarak üç adet x değerine karşılık gelir. |
a{n,} | n sayısı veya daha fazlası kadar a sayısını gösterir. Örneğin x{3,} üç adet veya daha fazla x değerine karşılık gelir. |
a{n,m} | n ile m arasında bir sayı aralığını gösterir. Örneğin, x{3,7} üç, dört, beş, altı veya yedi x'e karşılık gelir. |
() | Karakterleri bir arada gruplamak, böylece onları tek bir birim olarak kabul etmek için kullanılır. Örneğin, (htaccess)?book, "htaccess" öneki olsun ya da olmasın, "book" değerine karşılık gelir. |
^ | Düzenli bir ifadenin başlangıcını belirtir. Örneğin, "^Merhaba" ifadesi "Merhaba" ile başlayan herhangi bir dizeyi gösterir. "^" düzeltme işareti olmasaydı, "Merhaba" dizenin herhangi bir yerinde eşleşirdi. |
$ | Düzenli ifadenin sonunu belirtir. Örneğin, "world$", "world" ile biten herhangi bir dizeye karşılık gelir. "$" değeri olmasaydı, "world" dizenin herhangi bir yerinde eşleşirdi. |
? | Önceki karakteri isteğe bağlı olarak bildirir. Örneğin, "kitaplar?" ifadesi, "kitap" veya "kitaplar" ile eşleşir. Başka bir deyişle, "x?" sıfır veya "x" ten biriyle eşleşir. |
! | Olumsuzluğu ifade eder. Örneğin "!dizi", "dizi" dışındaki her şeyle eşleşir. |
. | Gerçek bir nokta (veya nokta), herhangi bir rastgele karakteri belirtir. |
- | Apache'ye URL'yi yeniden YAZMAMASI talimatını verir. Örnek sözdizimi: "example.com - [F]" |
+ | Önceki karakterlerden bir veya daha fazlasıyla eşleşir. Örneğin, "G+" bir veya daha fazla G ile eşleşir, "+" ise herhangi türden bir veya daha fazla karakterle eşleşecektir. |
* | Önceki karakterin sıfır veya daha fazlasıyla eşleşir. Örneğin, hepsini ifade etmek için ".*" kullanabiliriz. |
| | Mantıksal bir "veya" işlemcisi bildirir. Örneğin "(x|y)", "x" veya "y" ile eşleşir. |
\ | ^ $ ! . * | ( ) [ ] { } gibi karakterlerden kaçış oluşturmak için. |
\. | Gerçek bir noktayı (kaçış) gösterir. |
/* | Sıfır veya daha fazla eğik çizgi. |
.* | Sıfır veya daha fazla rastgele karakter. |
^$ | Boş bir dize tanımlar. |
^.*$ | Her şeyi eşleştirmek için standart kalıp. |
[^/.] | Ne eğik çizgi ne de nokta olmayan bir karakteri tanımlar. |
[^/.]+ | Eğik çizgi veya nokta içermeyen herhangi bir sayıda karakteri tanımlar. |
http:// | Gerçek bir ifadedir. Bu durumda, gerçek karakter dizisi "http://". |
^example.* | "example" terimiyle başlayan ve ardından bir karakter/karakterler gelen bir dizeyle eşleşir. |
^example\.com$ | Tam olarak "example.com" dizesini tanımlar. |
-d | Dizenin mevcut bir dizin olup olmadığını test eder. |
-f | Dizenin mevcut bir dosya olup olmadığını test eder. |
-s | Test dizesindeki dosyanın sıfırdan farklı bir değere sahip olup olmadığını test eder. |
.htaccess dosyasında en sık kullanılan durum kodları aşağıdaki tabloda gösterilmektedir:
Kod | Değer | Açıklama |
---|---|---|
301 | Moved Permanently | İstek gönderilen hedef kaynağa yeni bir kalıcı URI atandığını ve bu kaynağa gelecekte yapılacak tüm referansların döndürülen URI'lerden birini kullanması gerektiğini belirtir. |
302 | Found | Hedef kaynağın geçici olarak farklı bir URI altında bulunduğunu gösterir. |
400 | Bad Request | İstemci hatası olarak algılanan bir durum nedeniyle sunucunun isteği işleyemediğini veya işlemeyeceğini belirtir. |
401 | Unauthorized | Hedef kaynak için geçerli kimlik doğrulama bilgilerinin bulunmaması nedeniyle isteğin uygulanmadığını gösterir. |
403 | Forbidden | Sunucunun isteği anladığını ancak yerine getirmeyi reddettiğini gösterir. |
404 | Not Found | Sunucunun, istek yapılan URI ile ilgili hiçbir şey bulamadığını gösterir. |
410 | Gone | İstek yapılan kaynağın artık sunucuda mevcut olmadığını ve bu durumun muhtemelen kalıcı olacağını gösterir. |
500 | Internal Server Error | Sunucunun, isteği yerine getirmesini engelleyen beklenmeyen bir durumla karşılaştığını gösterir. |
501 | Not Implemented | Sunucunun isteği yerine getirmek için gereken işlevselliği desteklemediğini gösterir. |
502 | Bad Gateway | Sunucunun ağ geçidi veya proxy görevi görürken, isteği yerine getirmeye çalışırken eriştiği bir gelen sunucudan geçersiz bir yanıt aldığını gösterir. |
503 | Service Unavailable | Sunucunun geçici aşırı yükleme veya planlanmış bakım nedeniyle şu anda isteği yerine getiremediğini gösterir. |
504 | Gateway Timeout | Sunucunun bir ağ geçidi veya proxy görevi görürken, isteği tamamlamak için erişmesi gereken bir yukarı akış sunucusundan zamanında yanıt alamadığını gösterir. |
Kullanılan tüm durum kodları ile ilgili en güncel verilere buradan erişim sağlayabilirsiniz.