mod_alias
Belge ağacının parçalarının dosya sisteminin parçalarıyla eşlenmesini sağlar ve URL yönlendirmesi yapar.
Base
mod_alias.c
alias_module

Bu modülde bulunan yönergeler sunucuya istek olarak gelen URL’lerin denetlenmesini ve değiştirilmesini mümkün kılar. Alias ve ScriptAlias yönergeleri URL’lerin dosya sisteminin dizinlerine eşlenmesini sağlar. Böylece, kök dizini DocumentRoot ile belirtilen site belge ağacı altında bulunmayan içeriğe erişmek mümkün olur. ScriptAlias yönergesi buna ek olarak hedef dizini sadece CGI betiklerini içeren dizin olarak imler.

Redirect yönergesi, farklı bir URL ile yeni bir istek yapmaları için istemcileri yönlendirmekte kullanılır. Çoğunlukla özkaynak başka bir yere taşındığında kullanılır.

Alias, ScriptAlias ve Redirect yönergeleri Location veya LocationMatch bölümleri içinde kullanıldığında hedef yolu veya URL'yi betimlemek için ifade sözdizimi kullanılabilir.

mod_alias modülü basit URL değiştirme görevlerini yerine getirmek için tasarlanmıştır. Sorgu dizgelerini işleme sokmak gibi daha karmaşık görevler için mod_rewrite modülü ile sağlanan araçlar kullanılır.

mod_rewrite
URL’lerin Dosya sistemi ile Eşlenmesi

# İşlem Sırası

Farklı bağlamlarda bulunan Alias ve Redirect yönergeleri standart katıştırma kuralları ile ilgili diğer yönergeler gibi işleme sokulur. Fakat aynı bağlam dahilinde (örneğin, aynı VirtualHost bölümünde) çok fazla Alias ve Redirect varsa bunlar belli bir sıraya göre işleme sokulurlar.

İlk adımda, Alias’lardan önce bütün Redirect yönergeleri işleme sokulur. Bu bakımdan bir Redirect veya RedirectMatch ile eşleşen bir istek için hiçbir Alias uygulanmayacaktır. İkinci adımda yapılandırma dosyasında yer aldıkları sıraya göre Redirect ve Alias yönergeleri işleme sokulurlar, dolayısıyla ilk eşleşme öncelikli olmuş olur.

İlk eşleşmenin öncelikli olması sebebiyle, bu yönergelerin birden fazlası aynı alt yola uygulandığı takdirde, tüm yönergelerin etkili olabilmesi için en uzun yolu sıralamada en öne almalısınız. Örneğin aşağıdaki yapılandırma beklendiği gibi çalışacaktır:

Alias "/foo/bar" "/baz" Alias "/foo" "/gaq"

Ama yukarıdaki iki satır ters sırada yerleştirilmiş olsaydı, `/foo` rumuzu daima `/foo/bar` rumuzundan önce eşleşecek, dolayısıyla ikinci yönerge yok sayılacaktı.

Alias, ScriptAlias ve Redirect yönergeleri Location veya LocationMatch bölümleri içinde kullanıldığında bu yönergeler küresel olarak tanımlı Alias, ScriptAlias ve Redirect yönergelerinden öncelikli olur.

Alias
URL’leri dosya sistemi konumlarıyla eşler.
Alias [URL-yolu] dosya-yolu | dizin-yolu
server config
virtual host
directory

Alias yönergesi, belgelerin DocumentRoot dizininden farklı bir yerde saklanmasını mümkün kılar. `URL-yolu` ile başlayan URL’ler (% imlemesi çözüldükten sonra) `dizin-yolu` ile başlayan yerel dosyalarla eşlenir. `URL-yolu`, harf büyüklüğüne duyarsız sistemlerde bile harf büyüklüğüne duyarlıdır.

Alias "/image" "/ftp/pub/image"

`http://example.com/image/foo.gif` şeklinde bir istek, sunucunun `/ftp/pub/image/foo.gif` dosyasıyla yanıt vermesine sebep olurdu. Sadece tam yol parçaları eşleştirilir; bu bakımdan yukarıdaki Alias yapılandırması `http://example.com/imagefoo.gif` ile eşleşmez. Düzenli ifadelerin kullanıldığı daha karmaşık eşleşmeler için AliasMatch yönergesine bakınız.

`URL-yolu`’nu bir `/` ile sonlandırırsanız Alias yönergesini yorumlarken sunucunun da sona bir `/` ekleyeceğine dikkat ediniz. Yani, eğer

Alias "/icons/" "/usr/local/apache/icons/"

diye bir tanım yaparsanız sona bir / ekleme ihtiyacından dolayı `/icons` URL’si için bir Alias kullanılmayacaktır.

Alias hedefleri için ek Directory bölümleri belirtmeniz gerekebileceğine dikkat ediniz. Directory bölümlerinden önce yer alan Alias yönergelerine özellikle bakılır, dolayısıyla sadece Alias hedefleri etkilenir. (Bununla birlikte, Alias yönergelerinden önce işleme sokulan Location bölümlerinin uygulanacağına dikkat ediniz.)

Özellikle, DocumentRoot dışında bir dizine bir Alias oluşturuyorsanız hedef dizine doğrudan erişim izni vermeniz gerekebilir.

Alias "/image" "/ftp/pub/image" <Directory "/ftp/pub/image"> Require all granted </Directory>

URL-yolu değiştirgesindeki bölü çizgilerinin sayısı istek URL-yolundakiler kadardır.

Eğer Alias yönergesi Location veya LocationMatch bölümleri içinde kullanılırsa URL-yolu yoksayılır ve dosya-yolu ifade sözdizimi kullanılarak yorumlanır.
Bu sözdizimi Apache 2.4.19 ve sonrasında kulanılabilir.

<Location "/image"> Alias "/ftp/pub/image" </Location> <LocationMatch "/error/(?<NUMBER>[0-9]+)"> Alias "/usr/local/apache/errors/%{env:MATCH_NUMBER}.html" </LocationMatch>
AliasMatch
URL’leri dosya sistemi konumlarıyla düzenli ifadeleri kullanarak eşler.
AliasMatch "düzenli-ifade" "dosya-yolu|dizin-yolu"
server config
virtual host

Bu yönerge `URL-yolu` ile eşleşmek üzere bir

düzenli ifade
kabul etmesi dışında Alias yönergesine eşdeğerdir. Belirtilen düzenli ifade `URL-yolu` ile eşleşiyorsa sunucu parantezli eşleşmeleri belirtilen dizgede kullanarak dosya yolunu elde eder. Örneğin, `/icons` dizinini etkinleştirmek için şu yazılabilir:

AliasMatch "^/icons(.*)" "/usr/local/apache/icons$1"

Düzenli ifadeler
in tamamı kullanılabilmektedir. Örneğin, `URL-yolu` ile harf büyüklüğüne duyarsız eşleşmeler sağlayacak takma adlar kullanılabilir:

AliasMatch "(?i)^/image(.*)" "/ftp/pub/image$1"

Alias ve AliasMatch yönergeleri arasındaki başlıca fark Alias yönergesinin, URI'nin ek parçasını, eşleşen parçayı geçip sağ tarafta dosya yolunun ucuna kendiliğinden kopyalamasıdır. AliasMatch bunu böyle yapmaz. Yani hemen her durumda, düzenli ifadenin istenen URI'nin tamamıyla baştan sona eşleşmesi ve yer değiştirmeyi sağ tarafta yapması istenir.

Başka bir deyişle, basitçe Alias yerine AliasMatch yazmakla aynı etkiyi alamazsınız. En azından düzenli ifadenin başına bir `^` ve sonuna bir `(.*)$`, ikinci değiştirgenin sonuna da bir `$1` eklemeniz gerekir.

Örneğin aşağıdakini AliasMatch ile değiştirmek isteyelim:

Alias "/image/" "/ftp/pub/image/"

Bu eşdeğer DEĞİLdir - bunu yapmayın! Bu herhangi bir yerinde /image/ dizgesi bulunan tüm istekleri /ftp/pub/image/ altına gönderecektir:

AliasMatch "/image/" "/ftp/pub/image/"

Aynı etkiyi elde etmek için bu gerekiyor:

AliasMatch "^/image/(.*)$" "/ftp/pub/image/$1"

Şüphesiz, Alias yönergesini çalıştığı yerde AliasMatch kullanmanın hiç gereği yoktur. AliasMatch daha karmaşık şeyler yapmamızı sağlar. Örneğin farklı dosya çeşitlerini farklı dizinlerden sunmak isteyelim:

AliasMatch "^/image/(.*)\.jpg$" "/files/jpg.images/$1.jpg" AliasMatch "^/image/(.*)\.gif$" "/files/gif.images/$1.gif"

İstek URL'sinin başındaki bölü çizgileri, bu modüldeki yönergeler istek URL-yolu ile eşleştirilmeye çalışılmadan önce sunucu tarafından yokedilir.

Redirect
İstemciyi, bir yönlendirme isteği döndürerek farklı bir URL’ye yönlendirir.
Redirect [durum] [URL-yolu] URL
server config
virtual host
directory
.htaccess
FileInfo

Redirect yönergesi istemciye bir yönlendirme isteği döndürerek eski URL’yi yenisiyle eşler.

Eski `URL-yolu` bir bölü çizgisi ile başlar ve harf büyüklüğüne duyarlıdır (% imlemesi çözüldükten sonra). `URL-yolu` olarak göreli yollara izin verilmez.

`URL` ise ya bir şema ve konak ismi ile başlayan bir mutlak URL ya da bir bölü çizgisi ile başlayan bir URL yolu olabilir. İkinci durumda URL yolunun başına geçerli sunucu ismi ve şemayı sunucu ekler.

`URL-yolu` ile başlayan istekler istemciye hedef `URL` konumuna bir yönlendirme isteği olarak dönecektir. `URL-yolu`’nun devamı niteliğindeki ek yol hedef URL’ye eklenir.

# Farklı bir konaktaki bir URL'ye yönlendirme Redirect "/hizmet" "http://iki.example.com/hizmet"

# Aynı konak üzerinde yönlendirme Redirect "/bir" "/iki"

İstemcinin yaptığı `http://example.com/hizmet/fesmekan.txt` isteğine karşılık istemciye isteği `http://iki.example.com/hizmet/fesmekan.txt` olarak yapması söylenecektir. Bu `GET` isteklerinde de geçerlidir. Örneğin, `http://example.com/hizmet/foo.pl?q=23&a=42` isteği `http://iki.example.com/hizmet/foo.pl?q=23&a=42` adresine yönlendirilir. `POST`'ların iptal edileceğini unutmayın.
Sadece tam yol parçaları eşleştirilir, bu nedenle `http://example.com/hizmetfesmekan.txt` isteği yukarıdaki yönlendirme ile eşleşmeyecektir. İfade sözdizimi kullanılan daha karmaşık eşleşmeler için URL-yolu seçeneği aşağıda açıklandığı gibi yoksayılır. Düzenli ifadelerin kullanıldığı daha karmaşık eşleşmeler için RedirectMatch yönergesine de bakınız.

# Bilginize

Yapılandırma dosyasında yer alış sırasına bakmaksızın Redirect yönergeleri Alias ve ScriptAlias yönergelerinden önce ele alınır. Location bölümü içinde kullanılmış bir Redirect yönergesi URL-yolu belirtilmiş Redirect ve Alias yönergelerine göre önceliklidir.

Herhangi bir `durum` belirtilmemişse "geçici" yönlendirme (HTTP durum kodu: 302) yapılır. Bu, istemciye özkaynağın geçici olarak başka yere taşındığını belirtir. Diğer HTTP durum kodlarını döndürmek için kullanılabilecek `durum` değerleri:

`permanent`
  İstemciye özkaynağın kalıcı olarak taşındığını belirten kalıcı yönlendirme durumu (301) döndürülür.
`temp`
  İstemciye geçici yönlendirme durumu (302) döner. Bu öntanımlıdır.
`seeother`
  İstemciye özkaynağın yerine başka bir şey konduğunu belirten "diğerine bak" durumu (303) döndürülür.
`gone`
  İstemciye özkaynağın kalıcı olarak kaldırıldığını belirten "ölü bağlantı" durumu (410) döner. Bu durumda `URL` belirtilmez.

Diğer durum kodları için `durum` değiştirgesiyle sayısal durum kodu belirtilir. Eğer durum 300 ile 399 arasındaysa bir `URL` belirtmek gereklidir. Aksi takdirde, URL bileşeni ihmal edilmelidir. Belirtilecek durum kodunun geçerli bir HTTP Status kodu olmalı ve Apache HTTP Sunucusu kodu bilmelidir (`http_protocol.c` dosyasında bulunan `send_error_response` işlevine bakınız).

Redirect permanent "/bir" "http://example.com/iki" Redirect 30" "/yedi" http://example.com/baskabisey"

Eğer Redirect yönergesi URL-yolu belirtilmemiş bir Location veya LocationMatch bölümü içinde yer alıyorsa, URL seçeneği ifade sözdizimi kullanılarak yorumlanır.
Bu sözdizimi Apache 2.4.19 ve sonrasında kullanılabilir.

<Location "/bir"> Redirect permanent "http://example.com/iki" </Location> <Location "/yedi"> Redirect 303 "http://example.com/baskabisey" </Location> <LocationMatch "/error/(?<NUMBER>[0-9]+)"> Redirect permanent "http://example.com/errors/%{env:MATCH_NUMBER}.html" </LocationMatch>
RedirectMatch
Geçerli URL ile eşleşen bir düzenli ifadeye dayanarak bir harici yönlendirme gönderir.
RedirectMatch [durum] düzenli-ifade URL
server config
virtual host
directory
.htaccess
FileInfo

Bu yönerge `URL-yolu` ile eşleşmek üzere bir

düzenli ifade
kabul etmesi dışında Redirect yönergesine eşdeğerdir. Belirtilen düzenli ifade `URL-yolu` ile eşleşiyorsa sunucu parantezli eşleşmeleri belirtilen dizgede kullanarak dosya yolunu elde eder. Örneğin, tüm GIF dosyası isteklerini başka bir sunucudaki aynı isimli JPEG dosyalarına yönlendirmek için şu yazılabilir:

RedirectMatch "(.*)\.gif$" "http://baska.example.com$1.jpg"

Alias ve AliasMatch arasındaki farklarla ilgili hususlar Redirect ve RedirectMatch arasındakilere de uygulanır. Ayrıntılar için AliasMatch yönergesine bakınız.

RedirectTemp
İstemciyi, geçici bir yönlendirme isteği döndürerek farklı bir URL’ye yönlendirir.
RedirectTemp URL-yolu URL
server config
virtual host
directory
.htaccess
FileInfo

Bu yönerge istemciye daima geçici yönlendirme durumu (302) döndürür. Yani, `Redirect temp` ile aynı işi yapar.

RedirectPermanent
İstemciyi, kalıcı bir yönlendirme isteği döndürerek farklı bir URL’ye yönlendirir.
RedirectPermanent URL-yolu URL
server config
virtual host
directory
.htaccess
FileInfo

Bu yönerge istemciye daima kalıcı yönlendirme durumu (301) döndürür. Yani, `Redirect permanent` ile aynı işi yapar.

ScriptAlias
Bir URL’yi dosya sistemindeki bir yere eşler ve hedefi bir CGI betiği olarak çalıştırır.
ScriptAlias [URL-yolu] dosya-yolu|dizin-yolu
server config
virtual host
directory

Hedef dizini, mod_cgi modülünün CGI betiği yorumlayıcısı tarafından çalıştırılacak betikleri içeren dizin olarak imlemesi dışında Alias yönergesinin yaptığı işi yapar. `URL-yolu` ile başlayan harf büyüklüğüne duyarlı URL’ler (% imlemesi çözüldükten sonra), dosya sistemindeki bir tam yol olarak belirtilmiş `dizin-yolu` ile başlayan betiklerle eşlenir.

ScriptAlias "/cgi-bin/" "/siteler/cgi-bin/"

`http://example.com/cgi-bin/foo` şeklindeki bir istek sunucunun `/siteler/cgi-bin/foo` betiğini çalıştırmasına sebep olur. Bu yapılandırma aslında şuna eşdeğerdir:

Alias "/cgi-bin/" "/siteler/cgi-bin/" <Location "/cgi-bin"> SetHandler cgi-script Options +ExecCGI </Location>

ScriptAlias yönergesini bir betik veya eylemci ile birlikte de kullanabilirsiniz. Örnek:

ScriptAlias "/cgi-bin/" "/siteler/cgi-handler.pl"

Bu senaryoda `/cgi-bin/`’den istenen tüm dosyalar sizin belirttiğiniz dosya tarafından işleme sokulacaktır. Bu yöntemle kendi özel eylemcinizi kullanabilirsiniz. İsterseniz, bunu içerik eklemek ya da ısmarlama bir eylem için bir CGI sarmalayıcısı olarak da kullanabilirsiniz.

Yapılandırma değiştiğinde kaynak kodlarının ister istemez açığa çıkmasını istemiyorsanız CGI betiklerinizi DocumentRoot altına koymayınız. ScriptAlias yönergesi URL’yi doğru yere eşlemekten başka orayı bir CGI betikleri dizini olarak imler. CGI betiklerinizi DocumentRoot altına koyarsanız çalıştırmak için ScriptAlias değil, Directory, SetHandler ve Options yönergelerini örnekteki gibi kullanın:

<Directory "/usr/local/apache2/htdocs/cgi-bin" > SetHandler cgi-script Options ExecCGI </Directory>

Aynı dosya sistemi konumu ile çok sayıda `URL-yolu` eşleşebileceğinden, bir Directory bölümü ile sınırlanmadığı takdirde CGI betiklerinin kaynak kodları açığa çıkabilir; bu bakımdan ScriptAlias yönergesini yok sayan URL yollarının belirtilebilme olasılığı gözardı edilmemelidir.

Eğer ScriptAlias yönergesi URL-yolu belirtilmemiş bir Location veya LocationMatch bölümü içinde yer alıyorsa, URL seçeneği ifade sözdizimi kullanılarak yorumlanır.
Bu sözdizimi Apache 2.4.19 ve sonrasında kullanılabilir.

<Location "/cgi-bin"> ScriptAlias "/siteler/cgi-bin/" </Location> <LocationMatch "/cgi-bin/errors/(?<NUMBER>[0-9]+)"> ScriptAlias "/siteler/cgi-bin/errors/%{env:MATCH_NUMBER}.cgi" </LocationMatch>
CGI Öğreticisi
ScriptAliasMatch
Bir URL’yi dosya sistemindeki bir yere düzenli ifade kullanarak eşler ve hedefi bir CGI betiği olarak çalıştırır.
ScriptAliasMatch düzenli-ifade dosya-yolu|dizin-yolu
server config
virtual host

Bu yönerge `URL-yolu` ile eşleşmek üzere bir

düzenli ifade
kabul etmesi dışında ScriptAlias yönergesine eşdeğerdir. Belirtilen düzenli ifade `URL-yolu` ile eşleşiyorsa sunucu parantezli eşleşmeleri belirtilen dizgede kullanarak dosya yolunu elde eder. Örneğin, standart `/cgi-bin` dizinini etkin kılmak için şu yazılabilir:

ScriptAliasMatch "^/cgi-bin(.*)" "/usr/local/apache/cgi-bin$1"

AliasMatch yönergesindeki gibi,

düzenli ifadeler
in tamamı tüm güçleriyle kullanılabilmektedir. Örneğin, `URL-yolu` için harf büyüklüğüne duyarsız eşleşmeli bir takma ad oluşturmak mümkünür:

ScriptAliasMatch "(?i)^/cgi-bin(.*)" "/usr/local/apache/cgi-bin$1"

Alias ve AliasMatch arasındaki farklarla ilgili hususlar ScriptAlias ve ScriptAliasMatch arasındakilere de uygulanır. Ayrıntılar için AliasMatch yönergesine bakınız.