Pazar, Kasım 3, 2024

Nginx’te Akıllı 404 Yönlendirmeleri: Map Yöntemi ile URL Bazlı Hata Sayfası Kontrolü

yüksek çözünürlüklü nginx logosu

Nginx’te belirli URL’lerden gelen 404 isteklerini ana sayfaya yönlendirmek için map yöntemini kullanabiliriz. Bu yöntem, belirli URL kalıplarını tanımlamanıza ve bunları ana sayfaya yönlendirmenize olanak tanır. Üstelik normalden daha performanslı çalışarak NGINX üzerindeki süreçlerde sorun yaşatmaz.

Önce http bloğu içerisine aşağıdaki tanımlamayı yapın. bu bizim kullanacağımız mapping olacak. Tüm değişikliği burada yapacağız. nginx.conf sırf bunun için düzenleme yapmak istemezseniz. conf.d klasörü içerisine ekleyin ve bunu nginx.conf da çağırarak kullanın.

map $request_uri $redirect_to_home
{
	default 0;
	~^/eski-sayfa/.*$ 1;
	~^/artik-kullanilmayan/.*$ 1;
	/404/ 1;
}
Nginx
  1. map direktifi ile $redirect_to_home adında bir değişken tanımlıyoruz. Bu değişken, hangi URL’lerin ana sayfaya yönlendirileceğini belirler.
  2. map içinde:
    • default 0; ile varsayılan değeri 0 olarak ayarlıyoruz. Yani, özel olarak belirtilmeyen URL’ler yönlendirilmeyecek.
    • ~^/eski-sayfa/.*$ 1; ile /eski-sayfa/ ile başlayan tüm URL’leri yönlendirmeye dahil ediyoruz.
    • ~^/artik-kullanilmayan/.*$ 1; ile /artik-kullanilmayan/ ile başlayan tüm URL’leri yönlendirmeye dahil ediyoruz.
    • /404/ 1; ile doğrudan 404 sayfasına yapılan istekleri de yönlendiriyoruz.

404 isteklerini işleyebilmek için aşağıdaki değişikliği vhost dosyanız içerisine ekleyin.

error_page 404 = @handle_404;

location @handle_404
{
	if ($redirect_to_home = 1)
	{
		return 301 /;
	}
	return 404;
}
Nginx

error_page 404 = @handle_404; ile 404 hatalarını @handle_404 adlı bir konuma yönlendiriyoruz.

@handle_404 içinde if ($redirect_to_home = 1) ile map direktifinde 1 olarak işaretlenen URL’leri kontrol ediyoruz. Eğer koşul sağlanıyorsa, return 301 /; ile ana sayfaya kalıcı bir yönlendirme yapıyoruz. Koşul sağlanmıyorsa, normal 404 hatasını döndürüyoruz.