PDA

View Full Version : سوال: مشکل با url rewriting



hlikehamed
جمعه 08 مرداد 1389, 23:24 عصر
سلام
من از دی ال ال Intelligencia.UrlRewriter.dll برای تغییر آدرس ها یعنی همون url rewriting استفاده می کنم. توی لوکال خوب کار می کنه. اما وقتی توی وب میریزم و آپ می کنم ، این قسمت کار نمی کنه.
علت این مشکل از چیه؟ آیا راه حلی داره یا نه؟
تمامی تنظیمات رو هم انجام دادم.dll هم توی پوشه bin هست و فایل config رو هم تنظیم کردم.
ممنون میشم راهنمایی کنید

PhoenixNet
شنبه 09 مرداد 1389, 01:32 صبح
سلام

1- سرور نصب شده بر روی Visual Studio با IIS تفاوت داره

2-برای Url ReWriting باید پسوند فایلهاتون حتما aspx باشه تا IIS صفحه شما رو به ASP.net برای پردازش بده و در نتیجه URl Rewriting اتفاق بیفته.

پسوند HTML یا بدون پسوند قبول نمی کنه.

Ali_M.Eghbaldar
شنبه 09 مرداد 1389, 02:17 صبح
سلام hlikehamed (http://www.barnamenevis.org/forum/member.php?u=50074) جان
راستش امروز من دنبال Url Rewriting بودم کلی لینک جمع کردم که شروع کنم به فراگیریش :لبخند:
البته قبلا با Url Mapping کار کردم جوابم گرفتم ولی دوستان گفتن قدرت UrlRewriting بیشتره
اگه جواب گرفتی یه Sample برای منم می فرستی اگه زحتمی نیست و دوست داری؟
ممنون

hlikehamed
شنبه 09 مرداد 1389, 03:23 صبح
سلام.
من صفحه htm گذاشته بودم. با aspx تست نکرد. تست می کنم

چشم یویو جان. اگر به نتیجه رسیدم میزارم برات. اگر هم نرسیدم sample میزارم شما راه من رو ادامه بده :لبخند:
هر موقع وقت شد میزارم

hlikehamed
شنبه 09 مرداد 1389, 03:26 صبح
راستی من فایل global و کدهای مربوط به اون رو دیگه نذاشتم چون دیدم بدون اون نتیجه میده.(البته تو لوکال) ممکنه به خاطر این باشه؟

ممنون

eyes_shut_number1
شنبه 09 مرداد 1389, 10:20 صبح
سرور باید از WildCard پیشتیبانی کنه که اکثرا برای Win server 2008 میکنه برای 2003 باید به میزبان درخواست بدید

hlikehamed
شنبه 09 مرداد 1389, 11:41 صبح
همونطور که دوست عزیزمون گفت مشکلم با تغییر پسوند به aspx حل شد. ولی اینجوری خیلی دست آدم بسته میشه.

ولی طبق تحقیقاتی که کردم اگر سرور اختصاصی داشته باشین می تونین با تنظیمات IIS هر پسوندی رو rewrite کنین.
توی اولین فرصت توی همین تاپیک یه نمونه کد میزارم.
ممنون

Ali_M.Eghbaldar
شنبه 09 مرداد 1389, 17:01 عصر
سلام hlikehamed (http://barnamenevis.org/forum/member.php?u=50074) :بامزه:
منتظر کدت هستم

hlikehamed
شنبه 09 مرداد 1389, 18:24 عصر
سلام

این هم یه نمونه کد کوچولو برای کار با url rewrite :

53346

یه توضیح مختصر هم بدم :
برای انجام url wrewrite شما احتیاج به یه dll دارین که از توی سایت http://www.urlrewriting.net می تونین این dll رو دانلود کنین ( توی شاخه bin نمونه کدی که گذاشتم dll موجوده)
بعد از اینکار باید فایل web.config خودتون رو یه تغییراتی بدین. که شامل 3 قسمت میشه.

قسمت اول رو باید داخل تگ configuration و قبل از تگ system.web بنویسین :

که این کده :
<configSections>
<section name="rewriter" type="Intelligencia.UrlRewriter.Configuration.RewriterCo nfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>

قسمت دوم رو باید داخل تگ system.web به این صورت بنویسین:

<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</httpModules>

و در نهایت قسمت سوم که مربوط به آدرس های مجازی و واقعی میشه رو بعد از تگ system.web (یعنی بیرون از این تگ) باید وارد کنین .:

<rewriter>
<rewrite url="page-(.+).aspx" to="Show.aspx?pageid=$1"/>
</rewriter>

هر صفحه ای رو که بخواین آدرسش رو تغییر بدین توی این قسمت وارد کنین.
توی نمونه کدی که من گذاشتم صفحه ی اصلی که اطلاعات توش نمایش داده میشه show.aspx و صفحه مجازی اون page.aspx هستش
یه نکته کوچولو اینکه اگر صفحاتتون دارای querystring بود (مثل همین نمونه کد) توی این بخش آدرس مجازی رو به صورت page-(.+).aspx وارد کنین. مقدار query بعد از - قرار می گیره و (.+) میگه که هر مقداری توی این بخش بود به عنوان queryدر نظر بگیرید.
مقدار query توسط $1 ست میشه.
با یه مثال خلاصش میکنم. شما آدرس های page-1.aspx و page-2.aspx و page-3.aspx رو در نظ بگیرید.
ظاهرا 3 صفحه جدا به نظر میاد اما اون عددی که بعد از - قرار میگیره در واقع مقدار querystring ما هستش.
و صفحه واقعی به صورت show.aspx?pageid=1 و show.aspx?pageid=2 و show.aspx?pageid=3 هست.

و آخرین نکته اینکه اگه چندتا querystring رو بخواین پاس بدین به صفحه می تونین تعداد (.+) رو زیاد کنین و به ازای هر کدوم یه مقداری رو پاس بدین و توی صفحه واقعی هم $1 و $3 و $3 و ...

مثال :
page-(.+)-(.+)-(.+).aspx

صفحه واقعی :

Show.aspx?pageid=$1&amp;title=$2&amp;id=$3

امیدوارم با این توضیحات و نمونه کدی که گذاشتم مشکلتون حل بشه.

در ضمن از &amp; برای ذخیره کردن & توی xml به کار برده میشه.

موفق باشید

shahab2005
دوشنبه 11 مرداد 1389, 09:19 صبح
تشکر
امکانش هست طریقه عوض کردن پسوند aspx را هم توضیح بدید (تبدیل به htm یا هر چیز دیگه ای مثل bnvs)
یا با همین روش طریقه حذف پسوند رو بگید

Saber_Fatholahi
دوشنبه 11 مرداد 1389, 09:49 صبح
دوست من هم همين مشكل داشتم
احتمالا وب سرور شما IIS 7 به بالا هست
براي رفع مشكلتون لطفا نحوه ثبت Handler هارو توي اون تغيير بدين توي فايل وب كانفيگ توي قسمت webserver
موفق باشيد

hlikehamed
دوشنبه 11 مرداد 1389, 23:46 عصر
تشکر
امکانش هست طریقه عوض کردن پسوند aspx را هم توضیح بدید (تبدیل به htm یا هر چیز دیگه ای مثل bnvs)
یا با همین روش طریقه حذف پسوند رو بگید

توی یکی از پست ها بهش اشاره کردم.
برای اینکار باید IIS رو تنظیم کرد. معمولا توی سرورهای اختصاصی این امکان وجود داره.
اما بقیه رو نمیدونم. امتحان نکردم.

Pascal
دوشنبه 07 شهریور 1390, 15:35 عصر
سلام

این هم یه نمونه کد کوچولو برای کار با url rewrite :

53346

یه توضیح مختصر هم بدم :
برای انجام url wrewrite شما احتیاج به یه dll دارین که از توی سایت http://www.urlrewriting.net می تونین این dll رو دانلود کنین ( توی شاخه bin نمونه کدی که گذاشتم dll موجوده)
بعد از اینکار باید فایل web.config خودتون رو یه تغییراتی بدین. که شامل 3 قسمت میشه.




با سلام
امکان داره بفرمایید مشکل در کجاست؟ هنگامی که از url rewriting استفاده می کنم صفحات بعدی مثل صفحه ی اول مشاهده نمی شوند (منظورم مستر پیج و قالب مربوط به آن است).
با تشکر

milade
دوشنبه 07 شهریور 1390, 23:58 عصر
دوستان لطفاً نظراتی رو ارایه بدهند که "درست" باشه .اینجا جای تست افکار نیست .

پست اقا فتح اللهی رو یه نگاه کنید .
وب سرور 7 به بالا مثل 6 نیست .
همچنین شما میتوید با WildCard که در IIS 7 هست بدون نیاز به dll کار کنید .

پس ورژن IIS رو از پشتیبانی بپرسید و اعلام کنید .

Mahdiz
چهارشنبه 06 مهر 1390, 16:28 عصر
سلام.
من urlmapping رو با استفاده از بازنويسي فايل Error 404 توي asp کلاسيک پياده سازي کردم. الان مشکلي که دارم اينه که آخر کار آدرس من به www.site.com/rewrite.asp?404;http:\\www.site.com/page.asp (http://www.site.com/rewrite.asp?404;http:%5C%5Cwww.site.com/page.asp) تغيير مي‌کنه. ولي من مي‌خوام که آدرس عوض نشه.
جالب اينه که روي کامپيوتر Local اين مشکل وجود نداره ولي وقتي آپلود مي‌کنم اين مشکل پيش مي‌آيد.
آيا مي‌تونم با asp کلاسيک چيزي مثل آدرسهاي ويکي رو پياده کنم مثلاً :
http://fa.wikipedia.org/wiki/%D8%B4%D9%86%DA%AF%D9%88%D9%84_%D9%88_%D9%85%D9%86 %DA%AF%D9%88%D9%84

Mahdiz
یک شنبه 10 مهر 1390, 08:39 صبح
کسي نيست؟
خواهش مي‌کنم!

mehran_sh_t
چهارشنبه 13 مهر 1390, 19:08 عصر
سلام
برای من هم مشکل لود نشدن masterpage وجود داره، صفحه هایی که در یک پوشه قرار دارن اینطوری میشن
راه حلی هست؟؟؟؟


*** دوستان ورژن جدید رو آگر دانلود کنید تمام ایرادات بر طرف شده

از اینجا (http://www.urlrewriting.net/)

alaki_p
چهارشنبه 23 فروردین 1391, 15:46 عصر
دلیل لود نشدن کامل MasterPage و سایر Page اینه که وقتی شما آدرسی رو rewrite می کنید در واقع تمامی request های شما اهم از آدرس های تصاویر و حتی لینک فایل های css فایل های javascript تون هم پردازش میشن و آدرس اون ها چون client side ی هستند به صورت هوشمند همراه با کد های سرورتون rewrite نمی شن.
در نتیجه باید آدرس های آون ها رو هم ری رایت کنید...



<rewrite url="~/Styles/(.+)" to="$1" />
<rewrite url="~/Images/(.+)" to="$1" />
<rewrite url="~/Images/(.+)/(.+)" to="$2" />
<rewrite url="~/Scripts/(.+)" to="$1" />



یه چیزایی شبیه این، البته این آدرس ها به نسبت فولدر بندی پروژتون تغییر می کنه.