Apache'de mod_rewrite ile Dahili Yönlendirme Nasıl Gerçekleştirilir


Bu makalede ve bir sonraki makalede, belirli HTTP isteklerini bir web sitesindeki diğer sayfalara veya harici bir URL'ye eşlemek için mod_rewrite'ın nasıl kullanılacağını açıklayacağız.

Başka bir deyişle, bu iyi bilinen Apache modülü, pratik örneklerle göstereceğimiz gibi bir URL'yi başka bir URL'ye yönlendirmenize olanak tanır.

Önerilen Okuma: Apache Web Sunucunuzun Performansını Artıracak 5 İpucu

NOT: Aşağıdaki örnekler, Perl Uyumlu Normal İfadeler (PCRE) konusunda en azından biraz bilgi sahibi olduğunuzu varsaymaktadır. Bu konu bu makalenin kapsamı dışında olduğundan PCRE hakkında daha fazla ayrıntı için Perl 5 sürüm 24.0 belgelerine bakın.

Devam etmeden önce yeniden yazma modülünün yüklendiğinden emin olun. Bu, CentOS ve benzeri dağıtımlarda varsayılan davranış olsa da, Debian ve türevlerinde bunu aşağıdaki şekilde manuel olarak yüklemeniz gerekecektir:

a2enmod rewrite

Apache'yi mod_rewrite Modülünü Kullanacak Şekilde Yapılandırma

Basit olması açısından, mod_rewrite'ın () nasıl kullanılacağını açıklamak için CentOS 7 kutusundaki (IP 192.168.0.100) varsayılan siteyi kullanalım. DocumentRoot: /var/www/html, yapılandırma dosyası: /etc/httpd/conf/httpd.conf).

Apache'nin bu modülü kullanabilmesi için konfigürasyon dosyasına aşağıdaki satırı ekleyin:

RewriteEngine on

Bu yapılandırmanın aynı kutudaki sanal ana bilgisayarlar tarafından devralınmayacağını unutmamak önemlidir.

Bu nedenle, yeniden yazma kurallarını kullanmak istediğiniz her sanal ana makine için RewriteEngine'i eklemeniz gerekecektir.

Dahili yeniden yönlendirme: bir URL'yi aynı sanal ana bilgisayardaki başka bir URL ile eşleme

Dahili yeniden yönlendirme, mod_rewrite'ın en basit örneğidir. Tüm default.aspx isteklerini index.html'ye yönlendirmek istiyorsanız, RewriteEngine 'in altına aşağıdaki satırı (yeniden yazma kuralı olarak da bilinir) ekleyin üzerinde:

RewriteRule "^/default\.aspx$" "/index.html"

Değişikliklerin etkili olması için Apache'yi yeniden başlatmayı unutmayın.

Siteniz orijinal olarak ASP kullanılarak tasarlandıysa ve daha sonra düz HTML5 olarak değiştirildiyse bu kullanışlı olabilir. Arama motorları .aspx dosyasını dizine ekleyecektir ancak bu dosya artık mevcut değildir.

Bu durumda, potansiyel ziyaretçilerinizin bir hata sayfasıyla karşılaşmaması için isteği yeniden yönlendirmenin bir yolunu bulmanız gerekecektir. Test etmek için /var/www/html içinde index.html adında aşağıdaki içeriğe sahip basit bir HTML dosyası oluşturalım:

<!DOCTYPE html>
<html>
  <head>
	<meta charset="utf-8">
	<title>New site</title>
  </head>
  <body>
	<h2>Default.aspx was here, but now it's index.html</h2>
  </body>
</html>

Şaret ve dolar işaretleri, normal ifadenin /default ile başlayan ve .aspx ile biten herhangi bir dizeyle eşleşmesine neden olur sırasıyla.

Önerilen Okuma: Apache Performansını 10 Kat'a Kadar Hızlandırmak için Mod_Pagespeed'i Kurun

Şimdi tarayıcınızı başlatın ve 192.168.0.100/default.aspx adresine yönlendirin. İşler beklendiği gibi giderse Apache'nin bunun yerine index.html hizmetini sunması gerekir.
Ancak son kullanıcı adres çubuğunda yine de default.aspx ifadesini görecek ve bu da değişikliğin tamamen şeffaf olmasını sağlayacaktır:

Adres çubuğundaki URL'nin, sunucunun default.aspx adlı bir sayfa yerine aslında index.html sunduğunu göstermesini istiyorsanız, [R, ekleyin L] ile yeniden yazma kuralının sonuna şu şekilde devam edin:

RewriteRule "^/default\.aspx$" "/index.html" [R,L]

Burada [R,L], (R) tarayıcısına tam bir HTTP yönlendirmesi verilmesi gerektiğini ve başka kuralların işlenmemesi gerektiğini belirten iki isteğe bağlı işarettir:

Adres çubuğunun artık daha önce olduğu gibi default.aspx yerine, beklendiği gibi index.html'yi gösterdiğine dikkat edin.

Özet

Bu yazımızda dahili yönlendirme gerçekleştirmek için mod_rewrite'ın nasıl kullanılacağını anlattık. Farklı bir sunucuya taşınan bir kaynağa nasıl yönlendirileceğimizi ve kullanıcının tarayıcısına göre özel içeriğin nasıl görüntüleneceğini öğreneceğimiz bir sonraki gönderi için bizi takip etmeye devam edin. O zamana kadar mevcut yeniden yazma işaretlerinin tam listesi için Apache 2.4 belgelerine bakın.

Her zaman olduğu gibi, bu makaleyle ilgili herhangi bir sorunuz veya geri bildiriminiz varsa aşağıdaki yorum formunu kullanmaktan çekinmeyin. Sizden haber almak için sabırsızlanıyoruz!