⁧⁩تكوين تطبيقات ويب ثابتة Azure⁧⁩

يتم تعريف تكوين تطبيقات الويب الثابتة Azure في ملف staticwebapp.config.json، الذي يتحكم في الإعدادات التالية:

  • التوجيه
  • المصادقة
  • التخويل
  • قواعد احتياطية
  • تجاوز استجابة HTTP
  • تعريفات عنوان HTTP العمومية
  • أنواع MIME مخصصة
  • الشبكات

ملاحظة

تم إهمال routes.json الذي تم استخدامه مسبقا لتكوين التوجيه. استخدم staticwebapp.config.json كما هو موضح في هذه المقالة لتكوين التوجيه والإعدادات الأخرى لتطبيق الويب الثابت.

يتعلق هذا المستند بتطبيقات الويب الثابتة ل Azure، وهو منتج مستقل ومنفصل عن ميزة استضافة مواقع الويب الثابتة في Azure Storage.

موقع الملف

الموقع الموصى به لstaticwebapp.config.json في المجلد الذي تم تعيينه كما هو الحال app_location في ملف سير العمل. ومع ذلك، قد يتم وضع الملف في أي مجلد فرعي داخل المجلد الذي تم تعيينه ك app_location.

راجع مثال ملف التكوين للحصول على التفاصيل.

هام

يتم تجاهل الملف routes.json المهمل في حالة وجود staticwebapp.config.json.

مسارات

يمكنك تحديد قواعد لمسار واحد أو أكثر في تطبيق الويب الثابت. تسمح لك قواعد المسار بتقييد الوصول إلى المستخدمين في أدوار محددة أو تنفيذ إجراءات مثل إعادة التوجيه أو إعادة الكتابة. يتم تعريف المسارات على أنها مجموعة من قواعد التوجيه. راجع مثال ملف التكوين للحصول على أمثلة الاستخدام.

  • يتم تعريف القواعد في الصفيف routes ، حتى إذا كان لديك مسار واحد فقط.
  • يتم تقييم القواعد بالترتيب كما تظهر في الصفيف routes .
  • يتوقف تقييم القاعدة عند المباراة الأولى. تحدث مطابقة عندما تتطابق الخاصية وقيمة في الصفيف methods (إذا تم تحديدهاroute) مع الطلب. يمكن أن يتطابق كل طلب مع قاعدة واحدة على الأكثر.

تتداخل اهتمامات التوجيه بشكل كبير مع مفاهيم المصادقة (تحديد هوية المستخدم) والتفويض (تعيين القدرات للمستخدم). تأكد من قراءة دليل المصادقة والتفويض مع هذه المقالة.

تحديد المسارات

تتكون كل قاعدة من نمط مسار، إلى جانب واحد أو أكثر من خصائص القاعدة الاختيارية. يتم تعريف قواعد المسار في الصفيف routes . راجع مثال ملف التكوين للحصول على أمثلة الاستخدام.

هام

route يتم استخدام الخصائص و methods (إذا تم تحديدها) فقط لتحديد ما إذا كانت القاعدة تتطابق مع الطلب أم لا.

خاصية القاعدة مطلوب القيمة الافتراضية تعليق
route نعم غير متوفر نمط المسار الذي يطلبه المتصل.
  • يتم دعم أحرف البدل في نهاية مسارات المسار.
    • على سبيل المثال ، يطابق المسار / admin * أي مسار يبدأ ب / admin.
methods لا جميع الطرق يحدد مجموعة من طرق الطلب التي تطابق مسارا. تشمل الطرق المتاحة: GET، ، ، ، ، ، ، ، HEAD، CONNECTPOSTDELETEOPTIONSPUTTRACEو .PATCH
rewrite لا غير متوفر يحدد الملف أو المسار الذي تم إرجاعه من الطلب.
  • يستبعد كل منهما redirect الآخر من القاعدة.
  • لا تؤدي قواعد إعادة الكتابة إلى تغيير موقع المتصفح.
  • يجب أن تكون القيم مرتبطة بجذر التطبيق.
redirect لا غير متوفر يحدد وجهة إعادة توجيه الملف أو المسار لطلب.
  • يستبعد كل منهما rewrite الآخر من القاعدة.
  • تؤدي قواعد إعادة التوجيه إلى تغيير موقع المتصفح.
  • رمز الاستجابة الافتراضي هو 302 (إعادة توجيه مؤقتة)، ولكن يمكنك تجاوزه 301 باستخدام (إعادة توجيه دائمة).
statusCode لا 301 أو 302 لعمليات إعادة التوجيه رمز حالة HTTP للاستجابة.
headers لا غير متوفر تمت إضافة مجموعة من رؤوس HTTP إلى الاستجابة.
  • يتم تجاوز globalHeaders الرؤوس الخاصة بالمسار عندما يكون الرأس الخاص بالمسار هو نفسه الرأس العمومي في الاستجابة.
  • لإزالة رأس، قم بتعيين القيمة إلى سلسلة فارغة.
allowedRoles لا مجهول يحدد مجموعة من أسماء الأدوار المطلوبة للوصول إلى مسار.
  • تتضمن a-zالأحرف الصالحة ، و A-Z، 0-9و _.
  • ينطبق الدور anonymousالمضمن على جميع المستخدمين.
  • ينطبق الدور authenticatedالمضمن على أي مستخدم قام بتسجيل الدخول.
  • يجب أن ينتمي المستخدمون إلى دور واحد على الأقل.
  • تتم مطابقة الأدوار على أساس OR .
    • إذا كان المستخدم في أي من الأدوار المدرجة، منح حق الوصول.
  • يرتبط المستخدمون الفرديون بالأدوار من خلال الدعوات.

كل موقع له غرض محدد في خط أنابيب الطلب/الاستجابة.

الغرض الخصائص
طرق المباراة route, methods
العملية بعد مطابقة القاعدة وتفويضها rewrite (يعدل الطلب)

redirect، ، headersstatusCode (يعدل الاستجابة)
التفويض بعد مطابقة مسار allowedRoles

تحديد أنماط المسار

route يمكن أن يكون مكان الإقامة مسارا دقيقا أو نمط أحرف بدل.

المسار الدقيق

لتحديد مسار دقيق، ضع المسار الكامل للملف في الخاصية route .

{
  "route": "/profile/index.html",
  "allowedRoles": ["authenticated"]
}

تتطابق هذه القاعدة مع طلبات الملف / ملف التعريف/index.html. نظرا لأن index.html هو الملف الافتراضي، تتطابق القاعدة أيضا مع طلبات المجلد (/profile أو /profile/).

هام

إذا كنت تستخدم مسار مجلد (/profile أو /profile/) في route الخاصية، فلن يتطابق مع طلبات الملف / ملف التعريف/index.html. عند حماية مسار يخدم ملفا، استخدم دائما المسار الكامل للملف مثل /profile/index.html.

نمط حرف البدل

تتطابق قواعد أحرف البدل مع جميع الطلبات في نمط مسار، ولا يتم دعمها إلا في نهاية المسار، ويمكن تصفيتها حسب امتداد الملف. راجع مثال ملف التكوين للحصول على أمثلة الاستخدام.

على سبيل المثال، لتنفيذ مسارات لتطبيق تقويم، يمكنك إعادة كتابة جميع عناوين URL التي تندرج ضمن مسار التقويم لعرض ملف واحد.

{
  "route": "/calendar*",
  "rewrite": "/calendar.html"
}

يمكن لملفcalendar.htmlبعد ذلك استخدام التوجيه من جانب العميل لعرض طريقة عرض مختلفة لأشكال عناوين URL مثل /calendar/january/1، /calendar/2020و /calendar/overview.

ملاحظة

يطابق نمط /calendar/* المسار جميع الطلبات ضمن المسار / calendar/ . ومع ذلك، فإنه لن يتطابق مع طلبات المسارات / التقويم أو /calendar.html. استخدم /calendar* لمطابقة جميع الطلبات التي تبدأ ب /calendar.

يمكنك تصفية تطابقات أحرف البدل حسب امتداد الملف. على سبيل المثال ، إذا كنت ترغب في إضافة قاعدة تتطابق فقط مع ملفات HTML في مسار معين ، فيمكنك إنشاء القاعدة التالية:

{
  "route": "/articles/*.html",
  "headers": {
    "Cache-Control": "public, max-age=604800, immutable"
  }
}

للتصفية على امتدادات ملفات متعددة، يمكنك تضمين الخيارات في الأقواس المجعدة، كما هو موضح في هذا المثال:

{
  "route": "/images/thumbnails/*.{png,jpg,gif}",
  "headers": {
    "Cache-Control": "public, max-age=604800, immutable"
  }
}

تتضمن حالات الاستخدام الشائعة لمسارات أحرف البدل ما يلي:

  • عرض ملف معين لنمط مسار كامل
  • إنفاذ قواعد المصادقة والتفويض
  • تنفيذ قواعد التخزين المؤقت المتخصصة

تأمين المسارات مع الأدوار

يتم تأمين المسارات عن طريق إضافة اسم دور واحد أو أكثر إلى صفيف القاعدة allowedRoles . راجع مثال ملف التكوين للحصول على أمثلة الاستخدام.

هام

يمكن لقواعد التوجيه تأمين طلبات HTTP إلى المسارات التي يتم تقديمها من تطبيقات الويب الثابتة فقط. تستخدم العديد من أطر عمل الواجهة الأمامية التوجيه من جانب العميل الذي يعدل المسارات في المستعرض دون إصدار طلبات إلى تطبيقات الويب الثابتة. لا تؤمن قواعد التوجيه المسارات من جانب العميل. يجب على العملاء الاتصال بواجهات برمجة تطبيقات HTTP لاسترداد البيانات الحساسة. تأكد من أن واجهات برمجة التطبيقات تتحقق من هوية المستخدم قبل إرجاع البيانات.

افتراضيًا، ينتمي كل مستخدم إلى الدور anonymous المُضمَّن، وجميع المستخدمين الذين سجلوا الدخول هم أعضاء في الدور authenticated. اختياريا، يتم ربط المستخدمين بأدوار مخصصة عبر الدعوات.

على سبيل المثال، لتقييد مسار للمستخدمين المصادق عليهم فقط، أضف الدور المضمن authenticated إلى allowedRoles الصفيف.

{
  "route": "/profile*",
  "allowedRoles": ["authenticated"]
}

يمكنك إنشاء أدوار جديدة حسب الحاجة في allowedRoles الصفيف. لتقييد مسار للمسؤولين فقط، يمكنك تحديد دورك الخاص المسمى administrator، في الصفيف allowedRoles .

{
  "route": "/admin*",
  "allowedRoles": ["administrator"]
}
  • لديك السيطرة الكاملة على أسماء الأدوار. لا توجد قائمة يجب أن تلتزم بها أدوارك.
  • يرتبط المستخدمون الفرديون بالأدوار من خلال الدعوات.

هام

عند تأمين المحتوى، حدد الملفات الدقيقة عندما يكون ذلك ممكنا. إذا كان لديك العديد من الملفات لتأمينها، فاستخدم أحرف البدل بعد بادئة مشتركة. على سبيل المثال: /profile* يؤمن جميع المسارات المحتملة التي تبدأ ب /profile، بما في ذلك /profile.

تقييد الوصول إلى التطبيق بأكمله

من الشائع طلب المصادقة لكل مسار في التطبيق. لتمكين ذلك، أضف قاعدة تطابق جميع المسارات وتتضمن الدور المضمن في authenticated الصفيف allowedRoles .

يقوم التكوين المثال التالي بحظر الوصول المجهول وإعادة توجيه جميع المستخدمين غير المصادق عليهم إلى صفحة تسجيل الدخول إلى Azure Active Directory.

{
  "routes": [
    {
      "route": "/*",
      "allowedRoles": ["authenticated"]
    }
  ],
  "responseOverrides": {
    "401": {
      "statusCode": 302,
      "redirect": "/.auth/login/aad"
    }
  }
}

ملاحظة

بشكل افتراضي، يتم تمكين جميع موفري الهوية الذين تم تكوينهم مسبقا. لحظر موفر مصادقة، راجع المصادقة والتفويض.

الطرق الاحتياطية

غالبا ما تعتمد تطبيقات الصفحة الواحدة على التوجيه من جانب العميل. تقوم قواعد التوجيه من جانب العميل هذه بتحديث موقع نافذة المستعرض دون تقديم طلبات مرة أخرى إلى الخادم. إذا قمت بتحديث الصفحة، أو انتقلت مباشرة إلى عناوين URL التي تم إنشاؤها بواسطة قواعد التوجيه من جانب العميل، يلزم وجود مسار احتياطي من جانب الخادم لعرض صفحة HTML المناسبة (والتي تعد عموما index.html للتطبيق من جانب العميل).

يمكنك تحديد قاعدة احتياطية عن طريق إضافة قسم navigationFallback . يقوم المثال التالي بإرجاع /index.html لكافة طلبات الملفات الثابتة التي لا تتطابق مع ملف تم نشره.

{
  "navigationFallback": {
    "rewrite": "/index.html"
  }
}

يمكنك التحكم في الطلبات التي ترجع الملف الاحتياطي عن طريق تعريف عامل تصفية. في المثال التالي، يتم استبعاد طلبات مسارات معينة في المجلد / images وكافة الملفات الموجودة في المجلد /css من إرجاع الملف الاحتياطي.

{
  "navigationFallback": {
    "rewrite": "/index.html",
    "exclude": ["/images/*.{png,jpg,gif}", "/css/*"]
  }
}

مثال بنية الملف أدناه ، النتائج التالية ممكنة مع هذه القاعدة.

├── images
│   ├── logo.png
│   ├── headshot.jpg
│   └── screenshot.gif
│
├── css
│   └── global.css
│
└── index.html
طلبات إلى... ارجاع... مع الحالة...
/حول/ الملف /index.html 200
/صور/logo.png ملف الصورة 200
/صور/أيقونة.svg الملف /index.html - نظرا لأن امتداد الملف svg غير مدرج في عامل التصفية /images/*.{png,jpg,gif} 200
/صور/unknown.png لم يتم العثور على خطأ في الملف 404
/css/غير معروف.css لم يتم العثور على خطأ في الملف 404
/css/global.css ملف ورقة الأنماط 200
أي ملف آخر خارج مجلدات /images أو /css الملف /index.html 200

هام

إذا كنت تقوم بالترحيل من ملف routes.json المهمل، فلا تقم بتضمين المسار الاحتياطي القديم ("route": "/*") في قواعد التوجيه.

الرؤوس العمومية

يوفر globalHeaders القسم مجموعة من رؤوس HTTP المطبقة على كل استجابة، ما لم يتم تجاوزها بواسطة قاعدة رأس المسار ، وإلا سيتم إرجاع اتحاد كل من الرؤوس من المسار والرؤوس العمومية.

راجع مثال ملف التكوين للحصول على أمثلة الاستخدام.

لإزالة رأس، قم بتعيين القيمة إلى سلسلة فارغة ("").

تتضمن بعض حالات الاستخدام الشائعة للرؤوس العمومية ما يلي:

  • قواعد التخزين المؤقت المخصصة
  • فرض سياسات الأمان
  • إعدادات الترميز
  • تكوين مشاركة الموارد عبر المنشأ (CORS)

ينفذ المثال التالي تكوين CORS مخصص.

{
  "globalHeaders": {
    "Access-Control-Allow-Origin": "https://example.com",
    "Access-Control-Allow-Methods": "POST, GET, OPTIONS"
  }
}

ملاحظة

لا تؤثر الرؤوس العمومية على استجابات واجهة برمجة التطبيقات. يتم الاحتفاظ بالرؤوس في استجابات واجهة برمجة التطبيقات وإعادتها إلى العميل.

تجاوز الاستجابة

يوفر قسم responseOverrides فرصة لتحديد استجابة مخصصة عندما يقوم الخادم بإرجاع رمز خطأ. راجع مثال ملف التكوين للحصول على أمثلة الاستخدام.

تتوفر رموز HTTP التالية للتجاوز:

تعليمة برمجية للحالة المعنى السبب المحتمل
400 طلب غير صالح رابط دعوة غير صالح
401 غير مصرح به طلب صفحات مقيدة أثناء عدم المصادقة عليها
403 محظور
  • تم تسجيل دخول المستخدم ولكن ليس لديه الأدوار المطلوبة لعرض الصفحة.
  • تم تسجيل دخول المستخدم ولكن لا يمكن لوقت التشغيل الحصول على تفاصيل المستخدم من مطالبات الهوية الخاصة به.
  • هناك عدد كبير جدا من المستخدمين الذين قاموا بتسجيل الدخول إلى الموقع باستخدام أدوار مخصصة ، وبالتالي لا يمكن لوقت التشغيل تسجيل الدخول إلى المستخدم.
404 غير موجود لم يتم العثور على الملف

يوضح المثال التالي التكوين كيفية تجاوز رمز خطأ.

{
  "responseOverrides": {
    "400": {
      "rewrite": "/invalid-invitation-error.html"
    },
    "401": {
      "statusCode": 302,
      "redirect": "/login"
    },
    "403": {
      "rewrite": "/custom-forbidden-page.html"
    },
    "404": {
      "rewrite": "/custom-404.html"
    }
  }
}

النظام الأساسي

يتحكم platform القسم في الإعدادات الخاصة بالنظام الأساسي، مثل إصدار وقت تشغيل لغة واجهة برمجة التطبيقات.

تحديد إصدار وقت تشغيل لغة واجهة برمجة التطبيقات

لتكوين إصدار وقت تشغيل لغة واجهة برمجة التطبيقات، قم بتعيين apiRuntime الخاصية في platform القسم إلى إحدى القيم المعتمدة التالية.

إصدار وقت تشغيل اللغة نظام التشغيل إصدار Azure Functions apiRuntime⁩ القيمة
.NET Core 3.1 Windows 3.x dotnet:3.1
.NET 6.0 قيد المعالجة Windows 4.x dotnet:6.0
.NET 6.0 معزول Windows 4.x dotnet-isolated:6.0
Node.js 12.x Linux 3.x node:12
Node.js 14.x Linux 4.x node:14
Node.js 16.x (معاينة) Linux 4.x node:16
برنامج Python 3.8 Linux 3.x python:3.8
Python 3.9 Linux 4.x python:3.9

يوضح المثال التالي كيفية استخدام apiRuntime الخاصية لتحديد Node.js 16 كإصدار وقت تشغيل لغة واجهة برمجة التطبيقات.

{
  "platform": {
    "apiRuntime": "node:16"
  }
}

الشبكات

يتحكم networking القسم في تكوين الشبكة لتطبيق الويب الثابت الخاص بك. لتقييد الوصول إلى تطبيقك، حدد قائمة بكتل عناوين IP المسموح بها في allowedIpRanges.

ملاحظة

لا يتوفر تكوين الشبكة إلا في الخطة القياسية لتطبيقات الويب الثابتة من Azure.

حدد كل كتلة عنوان IPv4 في تدوين التوجيه Inter-Domain بدون فئة (CIDR). لمعرفة المزيد حول تدوين CIDR، راجع توجيه Inter-Domain بدون فئة. يمكن أن تشير كل كتلة عنوان IPv4 إلى مساحة عنوان عامة أو خاصة. إذا كنت تريد فقط السماح بالوصول من عنوان IP واحد ، فيمكنك استخدام /32 كتلة CIDR.

{
  "networking": {
    "allowedIpRanges": [
      "10.0.0.0/24",
      "100.0.0.0/32",
      "192.168.100.0/22"
    ]
  }
}

عند تحديد كتلة عنوان IP واحدة أو أكثر، يتم رفض الوصول إلى الطلبات التي تنشأ من عناوين IP التي لا تتطابق مع قيمة allowedIpRanges في.

بالإضافة إلى كتل عناوين IP، يمكنك أيضا تحديد علامات الخدمة في allowedIpRanges الصفيف لتقييد حركة المرور إلى خدمات Azure معينة.

"networking": {
  "allowedIpRanges": ["AzureFrontDoor.Backend"]
}

المصادقة

للحصول على تفاصيل حول كيفية تقييد المسارات للمستخدمين المصادق عليهم، راجع تأمين المسارات ذات الأدوار.

تعطيل ذاكرة التخزين المؤقت للمسارات المصادق عليها

إذا قمت بإعداد التكامل اليدوي مع Azure Front Door، فقد تحتاج إلى تعطيل التخزين المؤقت لمساراتك الآمنة. إذا قمت بتمكين الحافة على مستوى المؤسسة ، فهذا تم تكوينه بالفعل لك.

لتعطيل التخزين المؤقت للباب الأمامي في Azure للمسارات الآمنة، أضف "Cache-Control": "no-store" إلى تعريف رأس المسار.

على سبيل المثال:

{
    "route": "/members",
    "allowedRoles": ["authenticated, members"],
    "headers": {
        "Cache-Control": "no-store"
    }
}

بوابة إعادة التوجيه

يقوم forwardingGateway القسم بتكوين كيفية الوصول إلى تطبيق ويب ثابت من بوابة إعادة توجيه مثل CDN أو Azure Front Door.

ملاحظة

لا يتوفر تكوين بوابة إعادة التوجيه إلا في الخطة القياسية لتطبيقات الويب الثابتة من Azure.

المضيفون المعاد توجيههم المسموح بهم

تحدد القائمة أسماء المضيفين التي يجب allowedForwardedHostsقبولها في رأس X-Forwarded-Host . إذا كان هناك مجال مطابق في القائمة، فستستخدم X-Forwarded-Host تطبيقات الويب الثابتة القيمة عند إنشاء عناوين URL لإعادة التوجيه، مثل بعد تسجيل الدخول بنجاح.

لكي تعمل تطبيقات الويب الثابتة بشكل صحيح خلف بوابة إعادة التوجيه، يجب أن يتضمن الطلب من البوابة اسم المضيف X-Forwarded-Host الصحيح في الرأس ويجب إدراج نفس اسم المضيف في allowedForwardedHosts.

"forwardingGateway": {
  "allowedForwardedHosts": [
    "example.org",
    "www.example.org",
    "staging.example.org"
  ]
}

إذا لم X-Forwarded-Host يتطابق الرأس مع قيمة في القائمة، فستظل الطلبات تنجح، ولكن لا يتم استخدام الرأس في الاستجابة.

الرؤوس المطلوبة

الرؤوس المطلوبة هي رؤوس HTTP التي يجب إرسالها مع كل طلب إلى موقعك. أحد استخدامات الرؤوس المطلوبة هو رفض الوصول إلى موقع ما لم تكن جميع الرؤوس المطلوبة موجودة في كل طلب.

على سبيل المثال، يوضح التكوين التالي كيف يمكنك إضافة معرف فريد ل Azure Front Door يحد من الوصول إلى موقعك من مثيل Azure Front Door محدد. راجع البرنامج التعليمي تكوين Azure Front Door للحصول على التفاصيل الكاملة.

"forwardingGateway": {
  "requiredHeaders": {
    "X-Azure-FDID" : "692a448c-2b5d-4e4d-9fcc-2bc4a6e2335f"
  }
}
  • يمكن أن تكون أزواج المفاتيح / القيم أي مجموعة من السلاسل التعسفية
  • المفاتيح غير حساسة لحالة الأحرف
  • القيم حساسة لحالة الأحرف

شرطة مائلة زائدة

الشرطة المائلة الزائدة هي في / نهاية عنوان URL. تقليديا، يشير عنوان URL المتحرك للشرطة المائلة إلى دليل على خادم الويب، بينما تشير الشرطة المائلة غير الزائدة إلى ملف.

تتعامل محركات البحث مع عنواني URL بشكل منفصل، بغض النظر عما إذا كان ملفا أو دليلا. عندما يتم عرض المحتوى نفسه في كل من عناوين URL هذه ، يعرض موقع الويب الخاص بك محتوى مكررا يمكن أن يؤثر سلبا على تحسين محركات البحث (SEO). عند تكوينها بشكل صريح، تطبق تطبيقات الويب الثابتة مجموعة من قواعد تطبيع عناوين URL وإعادة التوجيه التي تساعد على تحسين أداء موقعك على الويب وتحسين محركات البحث.

سيتم تطبيق قواعد التطبيع وإعادة التوجيه التالية على كل من التكوينات المتاحة:

دائماً

عند الإعداد trailingSlash إلى ، تتم إعادة توجيه جميع الطلبات التي لا تتضمن شرطة مائلة زائدة إلى alwaysعنوان URL للشرطة المائلة الزائدة. على سبيل المثال، /contact تتم إعادة توجيهه إلى /contact/.

"trailingSlash": "always"
طلبات إلى... ارجاع... مع الحالة... والمسار...
/حول ملف /حول/index.html 301 /حول/
/حول/ ملف /حول/index.html 200 /حول/
/حول/index.html ملف /حول/index.html 301 /حول/
/اتصل بنا الملف /contact.html 301 /الاتصال/
/الاتصال/ الملف /contact.html 200 /الاتصال/
/contact.html الملف /contact.html 301 /الاتصال/

أبدًا

عند الإعداد trailingSlash إلى ، تتم إعادة توجيه جميع الطلبات التي تنتهي بشرطة مائلة زائدة إلى neverعنوان URL مائل غير زائد. على سبيل المثال، /contact/ تتم إعادة توجيهه إلى /contact.

"trailingSlash": "never"
طلبات إلى... ارجاع... مع الحالة... والمسار...
/حول ملف /حول/index.html 200 /حول
/حول/ ملف /حول/index.html 301 /حول
/حول/index.html ملف /حول/index.html 301 /حول
/اتصل بنا الملف /contact.html 200 /اتصل بنا
/الاتصال/ الملف /contact.html 301 /اتصل بنا
/contact.html الملف /contact.html 301 /اتصل بنا

تلقائي

عند الإعداد trailingSlash إلى ، تتم إعادة توجيه جميع الطلبات إلى المجلدات إلى autoعنوان URL مع شرطة مائلة زائدة. تتم إعادة توجيه جميع طلبات الملفات إلى عنوان URL مائل غير زائد.

"trailingSlash": "auto"
طلبات إلى... ارجاع... مع الحالة... والمسار...
/حول ملف /حول/index.html 301 /حول/
/حول/ ملف /حول/index.html 200 /حول/
/حول/index.html ملف /حول/index.html 301 /حول/
/اتصل بنا الملف /contact.html 200 /اتصل بنا
/الاتصال/ الملف /contact.html 301 /اتصل بنا
/contact.html الملف /contact.html 301 /اتصل بنا

للحصول على الأداء الأمثل لموقع الويب، قم بتكوين استراتيجية شرطة مائلة زائدة باستخدام أحد الأوضاع أو auto الأوضاع.alwaysnever

بشكل افتراضي، عند حذف التكوين trailingSlash ، تطبق تطبيقات الويب الثابتة القواعد التالية:

طلبات إلى... ارجاع... مع الحالة... والمسار...
/حول ملف /حول/index.html 200 /حول
/حول/ ملف /حول/index.html 200 /حول/
/حول/index.html ملف /حول/index.html 200 /حول/index.html
/اتصل بنا الملف /contact.html 200 /اتصل بنا
/الاتصال/ الملف /contact.html 301 /اتصل بنا
/contact.html الملف /contact.html 200 /contact.html

مثال على ملف التكوين

{
  "routes": [
    {
      "route": "/profile*",
      "allowedRoles": ["authenticated"]
    },
    {
      "route": "/admin/index.html",
      "allowedRoles": ["administrator"]
    },
    {
      "route": "/images/*",
      "headers": {
        "cache-control": "must-revalidate, max-age=15770000"
      }
    },
    {
      "route": "/api/*",
      "methods": ["GET"],
      "allowedRoles": ["registeredusers"]
    },
    {
      "route": "/api/*",
      "methods": ["PUT", "POST", "PATCH", "DELETE"],
      "allowedRoles": ["administrator"]
    },
    {
      "route": "/api/*",
      "allowedRoles": ["authenticated"]
    },
    {
      "route": "/customers/contoso*",
      "allowedRoles": ["administrator", "customers_contoso"]
    },
    {
      "route": "/login",
      "rewrite": "/.auth/login/github"
    },
    {
      "route": "/.auth/login/twitter",
      "statusCode": 404
    },
    {
      "route": "/logout",
      "redirect": "/.auth/logout"
    },
    {
      "route": "/calendar*",
      "rewrite": "/calendar.html"
    },
    {
      "route": "/specials",
      "redirect": "/deals",
      "statusCode": 301
    }
  ],
  "navigationFallback": {
    "rewrite": "index.html",
    "exclude": ["/images/*.{png,jpg,gif}", "/css/*"]
  },
  "responseOverrides": {
    "400": {
      "rewrite": "/invalid-invitation-error.html"
    },
    "401": {
      "redirect": "/login",
      "statusCode": 302
    },
    "403": {
      "rewrite": "/custom-forbidden-page.html"
    },
    "404": {
      "rewrite": "/404.html"
    }
  },
  "globalHeaders": {
    "content-security-policy": "default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'"
  },
  "mimeTypes": {
    ".json": "text/json"
  }
}

استنادا إلى التكوين أعلاه، راجع السيناريوهات التالية.

طلبات إلى... النتائج في...
/الملف الشخصي يتم تقديم ملف / profile/index.html للمستخدمين المصادق عليهم. تتم إعادة توجيه المستخدمين غير المصادق عليهم إلى /تسجيل الدخول بواسطة 401 قاعدة تجاوز الاستجابة.
/admin أو /admin/أو /admin/index.html يتم تقديم ملف /admin/index.html للمستخدمين المصادق عليهم في دور المسؤول. يتم عرض 403 خطأ على المستخدمين المصادق عليهم الذين ليسوا في دور المسؤول1. تتم إعادة توجيه المستخدمين غير المصادق عليهم إلى /تسجيل الدخول
/صور/logo.png يخدم الصورة مع قاعدة ذاكرة التخزين المؤقت المخصصة حيث يزيد الحد الأقصى للعمر قليلا عن 182 يوما (15,770,000 ثانية).
/api/admin GET يتم إرسال الطلبات من المستخدمين المصادق عليهم في دور المستخدمين المسجلين إلى واجهة برمجة التطبيقات. يتم عرض 401 خطأ على المستخدمين المصادق عليهم غير الموجودين في دور المستخدمين المسجلين والمستخدمين غير المصادق عليهم.

POST، PUT، PATCHويتم DELETE إرسال الطلبات الواردة من المستخدمين المصادق عليهم في دور المسؤول إلى واجهة برمجة التطبيقات. يتم عرض 401 خطأ على المستخدمين المصادق عليهم الذين ليسوا في دور المسؤول والمستخدمين غير المصادق عليهم.
/العملاء/contoso يتم تقديم المستخدمين المصادق عليهم الذين ينتمون إلى أدوار المسؤول أو customers_contoso الملف / customers/contoso/index.html . يتم عرض 403 خطأ على المستخدمين المصادق عليهم الذين ليسوا في أدوار المسؤول أو customers_contoso1. تتم إعادة توجيه المستخدمين غير المصادق عليهم إلى /login.
/تسجيل الدخول يواجه المستخدمون غير المصادق عليهم تحديا للمصادقة باستخدام GitHub.
/.auth/تسجيل الدخول/تويتر نظرا لأن التفويض باستخدام تويتر معطل بموجب قاعدة المسار، يتم إرجاع الخطأ، 404 والذي يعود إلى عرض /index.html باستخدام 200 رمز الحالة.
/تسجيل الخروج يتم تسجيل خروج المستخدمين من أي موفر مصادقة.
/التقويم/2021/01 يتم تقديم ملف /calendar.htmlللمتصفح .
/عروض خاصة يتم إعادة توجيه المتصفح بشكل دائم إلى /deals.
/data.json الملف الذي يتم تقديمه مع text/json نوع MIME.
/حول، أو أي مجلد يطابق أنماط التوجيه من جانب العميل يتم تقديم ملف /index.html برمز حالة 200 .
ملف غير موجود في المجلد /images/ 404 خطأ.

1 يمكنك توفير صفحة خطأ مخصصة باستخدام قاعدة تجاوز الاستجابة.

القيود

توجد القيود التالية لملف staticwebapp.config.json.

  • الحد الأقصى لحجم الملف 20 كيلوبايت
  • 50 دورا متميزا كحد أقصى

راجع مقالة الحصص للاطلاع على القيود والقيود العامة.

الخطوات التالية