كيف يمكنني إعادة توجيه امتداد أقل عناوين المواقع عبر ASP.NET?

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

سؤال

لدينا تصميم هيكل إلى موقع ويب الذي يحتوي على العديد من وحدات الأعمال.الآن أريد أن توجيه (301) إلى صفحة جديدة.

أي:
كان www.example.com/abc
الآن www.example.com/default.aspx?article=abc

لقد حاولت استخدام العالمية.asax للقيام بذلك ، وأنه يعمل بشكل صحيح عندما التصحيح من خلال ذلك.

        if (Request.RawUrl.Contains("abc"))
        {
            Response.RedirectLocation = "/default.aspx?article=abc";
            Response.StatusCode = 301;
            Response.StatusDescription = "Moved";
            Response.End();
        }

لذلك http://localhost:1234/example/abc الموجهات بشكل صحيح ، ولكن (أين 1234 هو منفذ الخادم التصحيح)
http://localhost/example/abc لا إعادة توجيه, انه يعطيني 404.

أي أفكار ؟


معلومات إضافية:إذا ذهبت إلى http://localhost/example/abc/default.aspx ثم إعادة توجيه بشكل صحيح.

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

المحلول

حسنا, إذا كان المنفذ يشير إلى استخدام المدمج في خادم الويب (الذي يأتي مع مباراة) ، وهذا ربما يعمل لأن هذا دائما طرق الطلبات من خلال ASP.NET إطار.

الطلبات تنتهي مع /abc سوف لا تلقائيا الطريق من خلال ASP.NET الإطار لأن IIS قد لا "تعرف" تريد لهم.تحتاج إلى التحقق من إعدادات IIS للتأكد من هذه الطلبات يتم توجيهها إلى aspnet_isapi.dll


تحرير: لإنجاز هذا, تحتاج إلى إضافة بدل التعيين:

  1. في "إدارة IIS" ، قم بتوسيع الكمبيوتر المحلي ، قم بتوسيع مواقع ويب المجلد, انقر بزر الماوس الأيمن فوق موقع ويب أو دليل ظاهري الذي تريده ثم انقر فوق خصائص.
  2. انقر فوق علامة التبويب المناسبة:Home Directory, دليل ظاهري أو دليل.
  3. في تطبيق الإعدادات ، انقر فوق تكوين ثم انقر فوق علامة التبويب تعيينات.
  4. تثبيت بدل تطبيق الخريطة ، القيام بما يلي:
    • على علامة التبويب تعيينات ، انقر فوق إضافة أو إدراج.
    • اكتب المسار إلى ملف DLL في مربع نص قابل للتنفيذ أو انقر فوق استعراض وانتقل إلى ذلك (على سبيل المثال ، ASP.NET 2.0 dll في c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll على الجهاز الخاص بي)
    • تمديد استخدام ".*" دون ونقلت بالطبع
    • حدد الأفعال التي كنت تريد أن تبحث عن (الحصول على,رأس,بعد,التصحيح هي المعتاد ASP.NET ، عليك أن تقرر)
    • تأكد من "مشغل البرنامج النصي" أو "تطبيق محرك" هو اختيار
    • قم بإلغاء تحديد "تحقق من أن الملف موجود"
    • انقر فوق حسنا.

قد يكون خارج عن هذا ، ولكن إذا أنا أمل أن شخصا ما سوف تصحح لي.:)

نصائح أخرى

يجب عليك استخدام IIS البرية بطاقة إعادة التوجيه, سوف تحتاج إلى شيء من هذا القبيل ؛

 *; www.example.com/*; www.example.com/default.aspx?article=$0

هناك إشارة معقولة في مايكروسوفت

إذا كنت تستخدم Apache أعتقد أنك سوف تحتاج إلى تعديل ملف htaccess.

أنت حاليا اختبار موقع ويب Visual Studio الخادم ؟ التي عادة ما يعمل الموقع على "localhost:nnnnn" حيث "nnnnn" هو رقم المنفذ (على النحو الوارد أعلاه هو 1234), فإنه لا تعيين إلى تشغيل دون واحد.

إذا كنت قد حصلت على IIS مثبتا على الجهاز المعني ، نشر المشروع الخاص بك إلى ذلك ، يجب أن تكون قادرة على التحقق من أنه يعمل بدون "nnnnn" كما أن هناك لا يبدو أن يكون أي شيء في التعليمات البرمجية الخاصة بك يمكن أن يؤدي به إلى عدم القيام بذلك.

هل حرصت على شبكة الإنترنت.ملفات التكوين هي نفسها بالنسبة لكل موقع (على افتراض :1234 مختلفة :80)

أيضا هل جربت localhost:80?

الخاص بك http://localhost/example/abc لا تحتج العالمية.asax مثل كنت تتوقع.عادة http://localhost يعمل على المنفذ 80 (:80).إذا كنت تريد تشغيل موقعك على المنفذ 80 سوف تحتاج إلى نشر موقعك في IIS لتشغيل هنا.

تحتاج إلى إعداد معالج رسم الخرائط في IIS إلى الأمام في جميع ملحقات غير معروفة إلى asp.net.أول واحد يعمل لأن كاسيني يتم التعامل مع جميع الطلبات ، والثاني لا يعمل لأن IIS هو أن تبحث عن الدليل ، و لا وجود لها, بدلا من .net framework تشغيل التعليمات البرمجية لديك.

هنا معلومات حول كيفية القيام بذلك إعادة كتابة عنوان الموقع في asp.net.

إذا كان ذلك ممكنا على الرغم من وأود أن أقترح عليك استخدام جديدة طلب تطبيق التوجيه أو UrlRewrite.net

IIS بشكل افتراضي لا يد جميع الطلبات على ASP.NET للتعامل مع.سوى بعض الموارد امتداد بينها "aspx" سيتم تمريرها إلى asp.net للتعامل مع.ماذا يحدث عند الطلب http://localhost/example/abc هو أن يحاول IIS حدد موقع الدليل لمعرفة ما إذا كان لديك ملف افتراضي (أيالافتراضي.aspx index.html) لتحميل من هذا الدليل.لأنه لا يمكن العثور على الدليل مع غير المرغوب فيه "اي بي سي" الوسم في الأمر لم يجد الافتراضي.aspx لتحميل.

عند محاولة تحميل http://localhost/example/abc/default.aspx, IIS يرى "aspx" التمديد وعلى الفور بتسليمه إلى ASP.NET وقت التشغيل للتعامل مع.السبب في أن http://localhost/example/abc طلب لا يتم تحميل هو أنه لم يحصل سلمت ASP.NET لذا بالطبع العالمية.asax لم يراها.

كاسيني استضافت الموقع يتعامل مع جميع الطلبات ، وبالتالي هذا النداء لا على التعامل معها من قبل ASP.NET و العالمية.asax.

أنا أتفق مع دارين Kopp, الذي اقترح أن تحتاج إلى إعداد معالج رسم الخرائط في IIS إلى الأمام ملحقات غير معروفة إلى ASP.NET.

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