Linux VPS'te Nginx 301 ve 302 yönlendirmeleri

2 min
VPS/VDS Hosting

Yönlendirmeler, bir sayfa taşındığında, alan adı değiştirdiğinizde ya da HTTPS'i zorunlu kıldığınızda ziyaretçilerinizi ve arama sıralamanızı korur. Bu rehber, VPS Linux Infrawire sunucunuzda temiz Nginx yönlendirmeleri yazmayı ve bunları canlıya almadan önce test etmeyi gösterir.

📋 Ön koşullar

  • Root SSH erişimli bir Linux VPS (Ubuntu 24.04 / Debian 12 veya AlmaLinux 9 / Rocky 9). IP adresini ve root parolasını müşteri alanınızda bulursunuz.
  • Kurulu ve en az bir siteyi sunan Nginx (sudo apt install nginx veya sudo dnf install nginx).
  • DNS A/AAAA kayıtları VPS_IP adresine işaret eden bir alan adı (example.com).

🧭 301 mi 302 mi

  • 301 (Moved Permanently): Taşınma kalıcıdır. Tarayıcılar ve arama motorları bunu önbelleğe alır ve sıralamayı yeni URL'ye aktarır.
  • 302 (Found): Taşınma geçicidir (bakım, A/B testi). Eski URL referans olmaya devam eder.

Şüpheniz varsa önce 302 kullanın: yanlış bir 301 tarayıcı önbelleğinde uzun süre kalabilir.

⚙️ return mü rewrite mı

return tercih edin: Nginx işlemeyi hemen bıraktığı için daha hızlı ve okunaklıdır.

Nginx
location = /old-page { return 301 /new-page; }

rewrite komutunu yalnızca URL'nin bir bölümünü düzenli ifadeyle yakalamanız gerektiğinde kullanın:

Nginx
rewrite ^/blog/(\d+)/(.*)$ /articles/$2 permanent;

permanent bayrağı 301, redirect bayrağı 302 gönderir.

🌐 www'dan www'suza yönlendirme

Yalnızca yönlendirme yapan ayrı bir server bloğu oluşturun. /etc/nginx/sites-available/example.com (Debian/Ubuntu) veya /etc/nginx/conf.d/example.com.conf (AlmaLinux/Rocky) dosyasını düzenleyin:

Nginx
1server { 2 listen 80; 3 listen [::]:80; 4 server_name www.example.com; 5 return 301 $scheme://example.com$request_uri; 6}

Tersi yön için iki ana makine adını değiştirin. $request_uri yolu ve sorgu dizesini korur.

🔒 HTTP'den HTTPS'e yönlendirme

Sertifika kurulduktan sonra tüm düz metin trafiği HTTPS'e gönderin:

Nginx
1server { 2 listen 80; 3 listen [::]:80; 4 server_name example.com www.example.com; 5 return 301 https://example.com$request_uri; 6} 7 8server { 9 listen 443 ssl; 10 listen [::]:443 ssl; 11 http2 on; 12 server_name www.example.com; 13 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; 14 ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 15 return 301 https://example.com$request_uri; 16}

Gerçek site, 443 portunu server_name example.com; ile dinleyen üçüncü bir blokta yer alır. http2 on; için Nginx 1.25.1 veya üstü gerekir; Ubuntu 24.04'te bu sağlanır.

🔗 Eski URL'den yeni URL'ye

Birkaç sayfa için en hızlı olan tam eşleşmeleri (=) kullanın:

Nginx
location = /about-us.html { return 301 /about; } location = /promo { return 302 /offers/current; }

Alt yolları koruyarak taşınan bir klasörün tamamı için:

Nginx
location /docs/ { rewrite ^/docs/(.*)$ /help/$1 permanent; }

🏠 Tüm alan adını yönlendirme

old-example.com alan adını bırakıp example.com kullanıyorsanız tüm yolları koruyun:

Nginx
1server { 2 listen 80; 3 listen [::]:80; 4 server_name old-example.com www.old-example.com; 5 return 301 https://example.com$request_uri; 6}

Eski alan adında da HTTPS varsa, kendi sertifikasıyla eşleşen bir listen 443 ssl; bloğu ekleyin; aksi hâlde tarayıcılar yönlendirmeden önce sertifika hatası gösterir.

✅ Test edin ve düzgünce yeniden yükleyin

Yeniden yüklemeden önce sözdizimini her zaman doğrulayın. Reload mevcut bağlantıları korur, restart korumaz.

Bash
sudo nginx -t sudo systemctl reload nginx

Ardından yönlendirmeyi izlemeden başlıkları kontrol edin:

Bash
curl -I http://www.example.com/old-page

Beklenen çıktı (kısaltılmış):

HTTP/1.1 301 Moved Permanently
Server: nginx
Location: https://example.com/old-page

Tüm zinciri izleyip her adımı görmek için curl -IL http://www.example.com/old-page kullanın. İdeal olan tek adımdır: HTTP, sonra www, sonra HTTPS gibi zincirlerden kaçının.

🛠️ Sorun giderme

Çok fazla yönlendirme (döngü). Bir kural kendi hedefiyle eşleşiyor; çoğu zaman bir proxy veya CDN HTTPS'i zaten sonlandırdığı içindir. curl -I ile Location başlığını kontrol edin ve hedef bloğun tekrar yönlendirmediğinden emin olun.

Değişikliğin etkisi yok. Etkinleştirilmemiş bir dosyayı düzenlediniz. Debian/Ubuntu'da /etc/nginx/sites-enabled/ içindeki bağlantıyı kontrol edin, sonra sudo nginx -t ve sudo systemctl reload nginx çalıştırın. Tarayıcılar 301'leri de önbelleğe alır: curl veya gizli pencere ile test edin.

Sorgu dizesi kayboldu. rewrite ... ? ya da sabit hedefle parametreler kaybolur. return içinde $request_uri kullanın veya $args değerini açıkça ekleyin.

Yanlış blok yanıt veriyor. Nginx bloğu server_name ile seçer. sudo nginx -T | grep server_name ile listeleyip yinelenenleri arayın.


🎉 Yönlendirmeleriniz yayında: kesin olduğunda kalıcı, olmadığında geçici ve ziyaretçileriniz bir şey fark etmeden önce curl ile test edilmiş.

En yeni teklifler, indirimler ve özel promosyonlardan haberdar olun.

Promosyonları gör

Çerez kullanıyoruz

Sitemizdeki deneyiminizi iyileştirmek için analiz çerezleri kullanıyoruz. Hiçbir veri üçüncü taraflara satılmaz. Daha fazlasını şurada öğrenin: gizlilik politikası.