<-
Apache > HTTP Sunucusu > Belgeleme > Sürüm 2.5 > Rewrite

mod_rewrite ile Devingen Kitlesel Sanal Konaklar

Mevcut Diller:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn 

Bu belge, mod_rewrite başvuru belgelerini tamamlar. Devingen olarak yapılandırılmış sanal konaklar oluşturmak için mod_rewrite modülünü nasıl kullanabileceğinizi açıklar.

mod_rewrite, sanal konakları yapılandırmanın genellikle en iyi yolu değildir. mod_rewrite'a başvurmadan önce alternatifleri değerlendirmelisiniz. Ayrıca "mod_rewrite kullanmaktan nasıl kaçınılır" belgesine de bakın.

Ayrıca bakınız:

top

Keyfi Konak Adları için Sanal Konaklar

Açıklama:

Alan adımızda çözümlenen her konak adı için, yeni VirtualHost bölümleri oluşturmak zorunda kalmadan otomatik olarak bir sanal konak oluşturmak istiyoruz.

Bu tarifle, her kullanıcı için SITE.example.com konak adını kullanacağımızı ve içeriklerini /home/SITE/www dizininden sunacağımızı varsayıyoruz. Ancak www.example.com'u bu eşlemeden hariç tutmak istiyoruz.

Çözüm:
RewriteEngine on

RewriteMap    lowercase int:tolower

RewriteCond   %{HTTP_HOST} !^www\.
RewriteCond   ${lowercase:%{HTTP_HOST}}   ^([^.]+)\.example\.com$
RewriteRule   ^(.*)    /home/%1/www$1
Tartışma
DNS çözümlemesine dikkat etmeniz gerekecektir - Apache ad çözümlemesini üstlenmez. Her konak adı için CNAME kayıtları veya bir DNS joker kaydı oluşturmanız gerekecektir. DNS kayıtları oluşturmak bu belgenin kapsamı dışındadır.

Kullanılan konak adlarının tümünün küçük harf olmasını sağlamak için dahili tolower RewriteMap yönergesi kullanılır; böylece oluşturulması gereken dizin yapısında belirsizlik olmaz.

Bir RewriteCond içinde kullanılan parantezler %1, %2 vb. geri başvurulara yakalanırken, RewriteRule içinde kullanılan parantezler $1, $2 vb. geri başvurulara yakalanır.

İlk RewriteCond, konak adının www. ile başlayıp başlamadığını kontrol eder ve başlıyorsa yeniden yazma atlanır.

Bu belgede tartışılan birçok teknikte olduğu gibi, bu görevi gerçekleştirmek için mod_rewrite gerçekten en iyi yol değildir. Bunun yerine, statik dosyaların sunulmasının ötesinde devingen içerik ve Alias çözümlemesi gibi şeyleri çok daha zarif bir şekilde ele alacak olan mod_vhost_alias kullanmayı düşünmelisiniz.

top

mod_rewrite Kullanılarak Devingen Sanal Konaklar

Bu httpd.conf alıntısı, ilk örnekle aynı şeyi yapar. İlk yarısı yukarıdaki karşılık gelen bölüme çok benzer; ancak geriye dönük uyumluluk ve mod_rewrite bölümünün düzgün çalışması için gereken bazı değişiklikler yapılmıştır; ikinci yarısı ise mod_rewrite modülünü asıl işi yapacak şekilde yapılandırır.

mod_rewrite, diğer URI çeviri modüllerinden (örneğin mod_alias) önce çalıştığından, mod_rewrite modülüne bu modüller tarafından işlenecek URL'leri açıkça yok sayması söylenmelidir. Ve bu kurallar aksi takdirde ScriptAlias yönergelerini atlayacağından, mod_rewrite modülünün bu eşlemeleri açıkça uygulaması gerekir.

# Konak adını Host: başlığından al
UseCanonicalName Off

# bölünebilir günlükler
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
CustomLog "logs/access_log" vcommon

<Directory "/www/hosts">
    # ScriptAlias'ın yaptığı gibi CGI yürütmesini
    # zorlayamadığımız için burada ExecCGI gereklidir
    Options FollowSymLinks ExecCGI
</Directory>

RewriteEngine On

# bir Host: başlığından türetilen ServerName herhangi bir durumda olabilir
RewriteMap  lowercase  "int:tolower"

## önce normal belgeleri ele al:
# Alias /icons/ çalışmasına izin ver - diğer takma adlar için tekrarla
RewriteCond  "%{REQUEST_URI}"  "!^/icons/"
# CGI'lerin çalışmasına izin ver
RewriteCond  "%{REQUEST_URI}"  "!^/cgi-bin/"
# sihri yap
RewriteRule  "^/(.*)$"         "/www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1"

## şimdi CGI'lerle ilgilen - bir işleyici zorlamalıyız
RewriteCond  "%{REQUEST_URI}"  "^/cgi-bin/"
RewriteRule  "^/(.*)$"         "/www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1"  [H=cgi-script]
top

Ayrı Bir Sanal Konak Yapılandırma Dosyası Kullanımı

Bu düzenleme, sanal konaktan belge köküne çeviriyi ayrı bir yapılandırma dosyasından çözmek için daha gelişmiş mod_rewrite özelliklerini kullanır. Bu daha fazla esneklik sağlar ancak daha karmaşık yapılandırma gerektirir.

vhost.map dosyası şöyle görünmelidir:

customer-1.example.com /www/customers/1
customer-2.example.com /www/customers/2
# ...
customer-N.example.com /www/customers/N

httpd.conf dosyası şunları içermelidir:

RewriteEngine on

RewriteMap   lowercase  "int:tolower"

# eşlem dosyasını tanımla
RewriteMap   vhost      "txt:/www/conf/vhost.map"

# takma adlarla yukarıdaki gibi ilgilen
RewriteCond  "%{REQUEST_URI}"               "!^/icons/"
RewriteCond  "%{REQUEST_URI}"               "!^/cgi-bin/"
RewriteCond  "${lowercase:%{SERVER_NAME}}"  "^(.+)$"
# dosya tabanlı yeniden eşlemeyi yap
RewriteCond  "${vhost:%1}"                  "^(/.*)$"
RewriteRule  "^/(.*)$"                      "%1/docs/$1"

RewriteCond  "%{REQUEST_URI}"               "^/cgi-bin/"
RewriteCond  "${lowercase:%{SERVER_NAME}}"  "^(.+)$"
RewriteCond  "${vhost:%1}"                  "^(/.*)$"
RewriteRule  "^/cgi-bin/(.*)$"                      "%1/cgi-bin/$1" [H=cgi-script]

Mevcut Diller:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn