يتضمن تنفيذ منطق إعادة التوجيه على الخادم عادةً إرسال رمز حالة HTTP محدد ورأس `Location` إلى العميل.

يتضمن تنفيذ منطق إعادة التوجيه على الخادم عادةً إرسال رمز حالة HTTP محدد ورأس Location إلى العميل. عندما يتلقى المتصفح هذه الاستجابة، فإنه ينتقل تلقائيًا إلى عنوان URL المحدد في رأس Location.

Intermediate

يتضمن تنفيذ منطق إعادة التوجيه على الخادم عادةً إرسال رمز حالة HTTP محدد ورأس Location إلى العميل. عندما يتلقى المتصفح هذه الاستجابة، فإنه ينتقل تلقائيًا إلى عنوان URL المحدد في رأس Location.

فيما يلي تفصيل للطرق والاعتبارات الشائعة:

1. رموز حالة HTTP لإعادة التوجيه

رموز حالة HTTP الأكثر شيوعًا لإعادة التوجيه هي:

  • 301 تم النقل بشكل دائم: يشير هذا إلى أنه تم نقل المورد بشكل دائم إلى عنوان URL جديد. ستقوم محركات البحث بتحديث فهارسها إلى عنوان URL الجديد، ويجب على العملاء تخزين هذا التوجيه مؤقتًا.
  • 302 تم العثور عليه (أو تم النقل مؤقتًا): يشير هذا إلى أن المورد متاح مؤقتًا في عنوان URL مختلف. لا تقوم محركات البحث عادةً بتحديث فهارسها، ويجب على العملاء عدم تخزين هذا التوجيه مؤقتًا.
  • 307 إعادة توجيه مؤقت: هذا هو خليفة HTTP/1.1 لـ 302. يذكر صراحة أنه لا ينبغي تغيير طريقة الطلب عند إعادة التوجيه.

بالنسبة لمعظم عمليات إعادة التوجيه الدائمة، يُفضل 301 لأغراض تحسين محركات البحث (SEO). بالنسبة لعمليات إعادة التوجيه المؤقتة، 302 أو 307 شائعة.

2. أمثلة التنفيذ من جانب الخادم

يعتمد التنفيذ الدقيق على تقنية الخادم التي تستخدمها.

أ) Node.js (Express.js)

const express = require('express');
const app = express();

// إعادة توجيه دائم
app.get('/old-path', (req, res) => {
  res.redirect(301, '/new-path');
});

// إعادة توجيه مؤقت
app.get('/another-old-path', (req, res) => {
  res.redirect('/another-new-path'); // افتراضي إلى 302
});

// إعادة توجيه يدوي مع رمز الحالة
app.get('/manual-redirect', (req, res) => {
  res.writeHead(301, {
    'Location': '/final-destination'
  });
  res.end();
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

ب) Python (Flask)

from flask import Flask, redirect, url_for, abort, Response

app = Flask(__name__)

@app.route('/old-path')
def old_path():
    return redirect(url_for('new_path'), code=301)

@app.route('/new-path')
def new_path():
    return "Welcome to the new path!"

@app.route('/another-old-path')
def another_old_path():
    return redirect('/another-new-path') # افتراضي إلى 302

@app.route('/another-new-path')
def another_new_path():
    return "This is another new path!"

@app.route('/manual-redirect')
def manual_redirect():
    response = Response(status=301)
    response.headers['Location'] = '/final-destination'
    return response

@app.route('/final-destination')
def final_destination():
    return "You reached the final destination!"

if __name__ == '__main__':
    app.run(debug=True)

ج) PHP

<?php
// إعادة توجيه دائم
if ($_SERVER['REQUEST_URI'] === '/old-path') {
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: /new-path");
    exit();
}

// إعادة توجيه مؤقت
if ($_SERVER['REQUEST_URI'] === '/another-old-path') {
    header("Location: /another-new-path"); // افتراضي إلى 302
    exit();
}

// ... بقية كود PHP
?>

د) Apache (.htaccess)

بالنسبة لخوادم الويب Apache، يمكن غالبًا تكوين عمليات إعادة التوجيه في ملفات .htaccess أو في التكوين الرئيسي للخادم.

# إعادة توجيه دائم
Redirect 301 /old-path /new-path

# إعادة توجيه دائم لنطاق
RedirectMatch 301 ^/old-domain/(.*)$ http://www.new-domain.com/$1

# RewriteRule لإعادة التوجيه الأكثر تعقيدًا
RewriteEngine On
RewriteRule ^old-path-regex$ /new-path-target [R=301,L]

هـ) Nginx

بالنسبة لخوادم الويب Nginx، يتم تكوين عمليات إعادة التوجيه في كتلة الخادم.

server {
    listen 80;
    server_name example.com;

    # إعادة توجيه دائم
    location = /old-path {
        return 301 /new-path;
    }

    # إعادة توجيه مؤقت
    location = /another-old-path {
        return 302 /another-new-path;
    }

    # إعادة توجيه النطاق بأكمله
    server_name old-domain.com;
    return 301 $scheme://new-domain.com$request_uri;

    # ... تكوينات أخرى
}

3. اعتبارات رئيسية

  • تحسين محركات البحث (SEO): استخدم 301 للتغييرات الدائمة للحفاظ على ترتيب محركات البحث.
  • تجربة المستخدم: يجب أن تكون عمليات إعادة التوجيه سريعة وسلسة. تجنب سلاسل إعادة التوجيه (عمليات إعادة توجيه متعددة قبل الوصول إلى الوجهة النهائية) لأنها يمكن أن تبطئ تحميل الصفحة.
  • الأمان: كن حذرًا عند إعادة توجيه الإدخالات التي يوفرها المستخدم لمنع ثغرات إعادة التوجيه المفتوحة. تحقق دائمًا من صحة عناوين URL لإعادة التوجيه وقم بتنظيفها.
  • عناوين URL النسبية مقابل المطلقة: يمكنك استخدام المسارات النسبية لإعادة التوجيه داخل نفس النطاق (على سبيل المثال، /new-path) أو عناوين URL المطلقة لإعادة التوجيه إلى نطاقات مختلفة (على سبيل المثال، https://www.example.com/new-path).
  • التسجيل: تأكد من أن خادمك يسجل عمليات إعادة التوجيه، خاصة 301، للمراقبة وتصحيح الأخطاء.
  • الاختبار: اختبر منطق إعادة التوجيه بالكامل للتأكد من أنها تعمل كما هو متوقع ولا تنشئ حلقات لا نهائية أو وجهات غير صحيحة.