Apache: Binlerce kalıcı yönlendirmeyi ele almanın en iyi yolu nedir?


20

3000 301 yönlendirmelerinin bir listesi var. Konusunda yardıma ihtiyacımız var

  1. Bunları koymak için en iyi yer hangisidir? Görünüşe göre bu 3000 satırları httpd.conf dosyasındaki vhost içine koymak bir karışıklık olurdu.
  2. Binlerce URL'yi işlemek için önerilen yollar nelerdir?
  3. Sayfa yükleme hızını ve apache sunucu yükünü ne kadar etkileyecek?

Teşekkürler.

Yanıtlar:


29

Sen kullanabilirsiniz Includedirektif in httpd.confbaşka dosyada yönlendirmeleri korumak için muktedir. Ancak, her talebin bir çok düzenli ifadeye karşı kontrol edilmesi gerektiğinden, çok verimli olmazdı. Ayrıca, dosyadaki her değişiklikten sonra sunucunun yeniden başlatılması gerekir.

Bu kadar çok yönlendirmenin daha iyi bir yolu, URI'lerden yönlendirmelere dbmbir harita bildirmek için RewriteMap tür yönergesini kullanmak olacaktır . Bu şekilde verimli olacaktır, dbm aramaları çok hızlı olduğundan ve haritadaki bir değişiklikten sonra, httpdharita dosyası değiştirme süresini kontrol ettiği için bir sunucuyu yeniden başlatmanız gerekmez .

Yeniden yazma kuralları şu şekilde görünecektir (Fedora 16 bilgisayarımda test edildi):

RewriteEngine On
RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.db
RewriteCond ${redirects:$1} !=""
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last]

Ve dbm haritası metin haritasından aşağıdaki /etc/httpd/conf/redirects.txtgibi oluşturulur :

/foo http://serverfault.com/
/bar/lorem/ipsum/ http://stackoverflow.com/

komut kullanma

httxt2dbm -f db -i /etc/httpd/conf/redirects.txt -o /etc/httpd/conf/redirects.db

Cevap için teşekkürler. Denedim ama hata alıyorum: bir satır redirects.txt dosya içeriği (boşlukla ayrılmış değerler) etkialanim.com/experiment etkialanim.com/new_page Bana 'RewriteCond $ {redirects: $ 1}! = "" . /Usr/local/apache/conf/httpd.conf: 314 satırındaki sözdizimi hatası: RewriteCond: bozuk bayrak sınırlayıcıları Bunu açıkladım ve sonra apache başladı ama mydomain.com/experiment (veya etki alanımdaki diğer herhangi bir url) ziyareti bana hata verdi "istek, tamamlanamayacak şekilde yeniden yönlendiriliyor".
ucker

Apache yukarıdaki kod pasajıyla yeniden başlamıyor. Lütfen yardım eder misiniz? Günlük dosyalarının hiçbirinde bununla ilgili herhangi bir hata göremiyorum.
ucker

Test edilmediğini söyledim - biraz değişiklik yapmasını bekliyordum. Bunun yeterli olacağını düşündüm, üzgünüm. Httpd başlamadı !=ve arasında bir boşluk olamaz ""- - Şimdi çalışmış ve test edilmiş bir versiyona örneğimi düzelttim.
Tometzky

Bir yorum daha: yönlendirmelerinizin sorgu dizelerine ( ?URL'deki sonraki her şey) bağlı olması gerekiyorsa farklı bir yaklaşım kullanmanız gerekir , ancak bu da mümkündür . Şimdi olduğu gibi, yeniden yönlendirmeye sorgu dizesi eklerdi, örneğin http://yourserver.com/foo?q=baryeniden yönlendirirdi http://serverfault.com/?q=bar.
Tometzky

Güncelleme için teşekkürler. RewriteMap redirects dbm=db:/etc/httpd/conf/redirects.dbhata verdi RewriteMap dbm type db is invalid. Ama kullandığımda RewriteMap redirects txt:/etc/httpd/conf/redirects.txtişe yaradı. Hala düz metin yerine açıkladığınız gibi karma bir yolla devam etmek istiyorum. Ama dbm hatası hakkında fazla bir şey bulamadım. Yardımın için teşekkürler.
ucker

2

Listeden sadece bağlantılar içeren yeni bir VHOST üreten bir komut dosyası yazardım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.