إعادة كتابة عنوان URL مع urlrewritingnet فشل مع char في عنوان URL

StackOverflow https://stackoverflow.com/questions/3821942

سؤال

أنا أستخدم urlrewritingnet في Umbraco للقيام ببعض إعادة كتابة عنوان URL الأساسي لعناوين URL للمنتج وعناوين URL. كل شيء على ما يرام على الجهاز المحلي الخاص بي (Visual Studio Dev-Webserver) وعلى خادم التطوير الداخلي لدينا (Window Server 2008 مع ISS 7 ، 32 بت). لكنه فشل في خادم الإنتاج ، وهو Window Server 2008 R2 مع IIS 7 (64 بت). الأعراض هي أن قاعدة إعادة الكتابة لم يتم تشغيلها. الخادم يعطيني ببساطة خطأ 404.

تبدو قاعدة إعادة الكتابة هكذا:

<add name="CategoryRewrite"
     virtualUrl="^/products/(.*)/(.*).aspx"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/default.aspx?umbPage=1&amp;maincategory=$1&amp;subcategory=$2"
     ignoreCase="true"/>

عنوان URL يشبه ما يلي - هذا لا يعمل:

http://example.net/products/category+name/sub+category.aspx

إذا قمت بتغيير عنوان URL إلى ما يلي ، فهو يعمل في جميع البيئات الثلاثة:

http://example.net/products/category%20name/sub%20category.aspx

من الواضح أن regex في سمة VirtualUrl يفشل عند استخدام + لحرف الفضاء. لكن يجب أن أعترف ، أنه يمكنني معرفة سبب فشل Regex فقط على خادم Windows 2008 R2.

أنا أبحث عن رؤى حول الاختلافات بين Windows Server 2008 R2 والبيئات الأخرى. ما الذي يجب أن أبحث عنه؟

لقد أكدت أن system.web.regularexpressions.dll هو نفس الإصدار على الخوادم.

هل كانت مفيدة؟

المحلول

المشكلة هي أن مرشح طلب IIS7 يرفض عناوين URL التي تحتوي على + أحرف. الحل هو إضافة ما يلي web.config:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering allowDoubleEscaping="true" />
  </security>
 </system.webServer>
</configuration> 

لمزيد من التفاصيل: http://blogs.iis.net/thomad/archive/2007/12/17/iis7-rejecting-urls-containing.aspx

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

نصائح أخرى

هذا يبدو غريباً بالنسبة لي لأن regex يطابق أيضًا أحرف "+". ربما تكون المشكلة بسبب الحرف الأول في regex ، بداية السلسلة "^" التي تستخدمها. ربما على خادم الإنتاج ، تحصل على عنوان URL المطلق وعلى خادم البيئة DEV الخاص بك ، تم تمرير عنوان URL النسبي إلى وحدة إعادة الكتابة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top