Apache HTTP Sunucusu Sürüm 2.4
Apache Modülü mod_alias
Açıklama: | Belge ağacının parçalarının dosya sisteminin parçalarıyla eşlenmesini sağlar ve URL yönlendirmesi yapar. |
---|---|
Durum: | Temel |
Modül Betimleyici: | alias_module |
Kaynak Dosyası: | mod_alias.c |
Özet
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.
İş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 Yönergesi
Açıklama: | URL’leri dosya sistemi konumlarıyla eşler. |
---|---|
Sözdizimi: | Alias [URL-yolu] dosya-yolu |
dizin-yolu |
Bağlam: | sunucu geneli, sanal konak, dizin |
Durum: | Temel |
Modül: | mod_alias |
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 Yönergesi
Açıklama: | URL’leri dosya sistemi konumlarıyla düzenli ifadeleri kullanarak eşler. |
---|---|
Sözdizimi: | AliasMatch "düzenli-ifade"
"dosya-yolu|dizin-yolu" |
Bağlam: | sunucu geneli, sanal konak |
Durum: | Temel |
Modül: | mod_alias |
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 ifadelerin 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 Yönergesi
Açıklama: | İstemciyi, bir yönlendirme isteği döndürerek farklı bir URL’ye yönlendirir. |
---|---|
Sözdizimi: | Redirect [durum] [URL-yolu]
URL |
Bağlam: | sunucu geneli, sanal konak, dizin, .htaccess |
Geçersizleştirme: | FileInfo |
Durum: | Temel |
Modül: | mod_alias |
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 Yönergesi
Açıklama: | Geçerli URL ile eşleşen bir düzenli ifadeye dayanarak bir harici yönlendirme gönderir. |
---|---|
Sözdizimi: | RedirectMatch [durum] düzenli-ifade
URL |
Bağlam: | sunucu geneli, sanal konak, dizin, .htaccess |
Geçersizleştirme: | FileInfo |
Durum: | Temel |
Modül: | mod_alias |
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.
RedirectPermanent Yönergesi
Açıklama: | İstemciyi, kalıcı bir yönlendirme isteği döndürerek farklı bir URL’ye yönlendirir. |
---|---|
Sözdizimi: | RedirectPermanent URL-yolu URL |
Bağlam: | sunucu geneli, sanal konak, dizin, .htaccess |
Geçersizleştirme: | FileInfo |
Durum: | Temel |
Modül: | mod_alias |
Bu yönerge istemciye daima kalıcı yönlendirme durumu (301) döndürür.
Yani, Redirect permanent
ile aynı işi yapar.
RedirectTemp Yönergesi
Açıklama: | İstemciyi, geçici bir yönlendirme isteği döndürerek farklı bir URL’ye yönlendirir. |
---|---|
Sözdizimi: | RedirectTemp URL-yolu URL |
Bağlam: | sunucu geneli, sanal konak, dizin, .htaccess |
Geçersizleştirme: | FileInfo |
Durum: | Temel |
Modül: | mod_alias |
Bu yönerge istemciye daima geçici yönlendirme durumu (302) döndürür.
Yani, Redirect temp
ile aynı işi yapar.
ScriptAlias Yönergesi
Açıklama: | Bir URL’yi dosya sistemindeki bir yere eşler ve hedefi bir CGI betiği olarak çalıştırır. |
---|---|
Sözdizimi: | ScriptAlias [URL-yolu]
dosya-yolu|dizin-yolu |
Bağlam: | sunucu geneli, sanal konak, dizin |
Durum: | Temel |
Modül: | mod_alias |
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.
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>
Ayrıca bakınız:
ScriptAliasMatch Yönergesi
Açıklama: | Bir URL’yi dosya sistemindeki bir yere düzenli ifade kullanarak eşler ve hedefi bir CGI betiği olarak çalıştırır. |
---|---|
Sözdizimi: | ScriptAliasMatch düzenli-ifade
dosya-yolu|dizin-yolu |
Bağlam: | sunucu geneli, sanal konak |
Durum: | Temel |
Modül: | mod_alias |
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
ifadelerin 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.