PDA

View Full Version : سوال: نحوه انجام این url rewriting



bftarane
سه شنبه 30 مهر 1392, 11:13 صبح
سلام.
چطور میشه کار زیر رو انجام داد؟
وقتی کاربر بعد از آدرس هر چیزی وارد کرد که پسوند aspx نداشت مثلاً myname بره به صفحه Test.aspx
ولی وقتی هر چیزی وارد کرد که پسوند aspx داشت مثلاً hello.aspx بره به خود صفحه یعنی بره به hello.aspx

لطفاً راهنمایی کنید چطور میشه این کار رو انجام داد؟
فرق نمی کنه url rewriting باشه یا Routing یا نمی دونم map.
لطفاً هر راهی به ذهنتون می رسه راهنمایی کنید.

bftarane
سه شنبه 30 مهر 1392, 12:05 عصر
سلام مجدد.
بچه ها من یه پروژه جدید درست کردم و این کدها کار می کنه.

<?xml version="1.0"?>
<configuration>
<configSections>
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterCo nfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</httpModules>
</system.web>

<rewriter>
<if header="url" match="/(.+).aspx">
<rewrite url="(.+).aspx" to="$1.aspx" processing="stop"/>
</if>
<if header="url" match="/(.+)">
<rewrite url="(.+)" to="~/T/test.aspx?id=$1" processing="stop"/>
</if>
</rewriter>
</configuration>

ولی پروژه قبلی در هاست دیگه ای هست و البته خیلی کاملتره و اونجا این دستورات درست عمل نمی کنن.
دلیل این چی می تونه باشه؟
اگه لازمه اون وب کانفیگ رو هم کامل بزارم.

اگه راه بهتری هم میشناسید جدا از راهی که من استفاده کردم لطفاً در میون بزارید.

aspismylove
سه شنبه 30 مهر 1392, 12:06 عصر
سلام.
چطور میشه کار زیر رو انجام داد؟
وقتی کاربر بعد از آدرس هر چیزی وارد کرد که پسوند aspx نداشت مثلاً myname بره به صفحه Test.aspx
ولی وقتی هر چیزی وارد کرد که پسوند aspx داشت مثلاً hello.aspx بره به خود صفحه یعنی بره به hello.aspx

لطفاً راهنمایی کنید چطور میشه این کار رو انجام داد؟
فرق نمی کنه url rewriting باشه یا Routing یا نمی دونم map.
لطفاً هر راهی به ذهنتون می رسه راهنمایی کنید.

سلام، فک نکنم کار مشکلی باشه ...

شما بیاین مقداری که بعد از آدرس داره ارسال میشه رو چک کنید، با دستور SubString هم میتونید چک کنید که مقدار ارسالی \سوند داره یا نه، اگه داره چی هست و به کجا باید فرستاده بشه ...

zootos
سه شنبه 30 مهر 1392, 12:34 عصر
این کد رو به web.config خودتون اضافه کنید :

<rule name="rule 1X" stopProcessing="true">
<match url="^(.*)/$" />
<action type="Rewrite" url="/{R:1}.aspx" />
</rule>
<rule name="rule 2X" stopProcessing="true">
<match url="^(.*)$" />
<action type="Rewrite" url="/{R:1}.aspx" />
</rule>
<rule name="rule 3X" stopProcessing="true">
<match url="^(.*).aspx$" />
<action type="Rewrite" url="/{R:1}.aspx" />
</rule>

bftarane
سه شنبه 30 مهر 1392, 12:41 عصر
سلام، فک نکنم کار مشکلی باشه ...

شما بیاین مقداری که بعد از آدرس داره ارسال میشه رو چک کنید، با دستور SubString هم میتونید چک کنید که مقدار ارسالی \سوند داره یا نه، اگه داره چی هست و به کجا باید فرستاده بشه ...
من الآن این دستورات رو نوشتم در رویداد لود صفحه Default ولی جواب نمی ده. (حالا فعلاً از Substring و split و این حرفا گذشتم) دستی می یام در آدرس بار این رو وارد می کنم برای تست http://localhost:8057/Intelli/u
ولی انگار این می ره دنبال یه پوشه به اسم u می گرده این طوری.

protected void Page_Load(object sender, EventArgs e)
{

string url = Request.Url.AbsoluteUri;
Response.Write(url);
if (url == "http://localhost:8057/Intelli/u")
{
Response.Redirect("T/test.aspx");
}
else
{
Response.Redirect(url);
}
}

bftarane
سه شنبه 30 مهر 1392, 12:44 عصر
این کد رو به web.config خودتون اضافه کنید :

<rule name="rule 1X" stopProcessing="true">
<match url="^(.*)/$" />
<action type="Rewrite" url="/{R:1}.aspx" />
</rule>
<rule name="rule 2X" stopProcessing="true">
<match url="^(.*)$" />
<action type="Rewrite" url="/{R:1}.aspx" />
</rule>
<rule name="rule 3X" stopProcessing="true">
<match url="^(.*).aspx$" />
<action type="Rewrite" url="/{R:1}.aspx" />
</rule>


شما از dll خاصی استفاده کردید؟ من از Intelligencia.UrlRewriter استفاده کرده بودم. منظورم اینه جز این کدها اگه کار خاص دیگه ای هم لازمه لطفاً بگید.

در ضمن اینا رو در کدوم Section از web.config باید بنویسم.


------------------------------
لطفاً اگه کسی مرجعی می شناسه که معنی این علائمی که در url rewriting استفاده می شه رو گفته باشه معرفی کنه.

zootos
سه شنبه 30 مهر 1392, 13:41 عصر
نیاز به dll خاصی نیست اگر سرور UrlRewriter رو ساپورت کنه اتوماتیک توی web.config یه بخشی ایجاد میشه با همین نام ( UrlRewriter ) که میتونید کدها رو اونجا قرار بدید یا اگه به iis دسترسی دارید میتونید توی قسمت UrlRewriter ، رول خودتون رو طراحی و اضافه کنید.

bftarane
سه شنبه 30 مهر 1392, 13:47 عصر
پس ممکنه دلیل کار نکردن کدی که گذاشته بودم در یه هاست دیگه پشتیبانی نکردنش هاستش از urlrewrite باشه درسته؟

کمی کداتون رو توضیح می دید الآن کجا شما گفتید که اگه پسوند Aspx نبود به صفحه Test ریدایرکت بشه؟

و اینکه من این کدا رو نوشتم و می خوام در لوکال امتحان کنم
<UrlRewriter>

<rule name="rule 1X" stopProcessing="true">
<match url="^(.*)/$" />
<action type="Rewrite" url="/{R:1}.aspx" />
</rule>
<rule name="rule 2X" stopProcessing="true">
<match url="^(.*)$" />
<action type="Rewrite" url="/{R:1}.aspx" />
</rule>
<rule name="rule 3X" stopProcessing="true">
<match url="^(.*).aspx$" />
<action type="Rewrite" url="/{R:1}.aspx" />
</rule>


</UrlRewriter>
ولی ارور می ده و میگه Unrecognized configuration section UrlRewriter. 6

داخل <system.web> هم گذاشتم بازم مشکل داره.
ولی یه گزینه ای به اسم urlmapping هست.

zootos
سه شنبه 30 مهر 1392, 14:33 عصر
اولش اینو بگم کد های rewriting به هیچ وجه ریدایرکت نمی کنن ، یعنی بکگراند انجام میشن و url هیچ تغییری نمی کنه یعنی شما وقتی Test بدون aspx فراخونی می کنی url به test.aspx تبدیل نمی شه بلکه همون test می مونه ولی ریدایرک اینطوری نیست url هم تغییر میکنه
برای اجرا شدن باید ماژولش روی iis نصب شه تا کار کنه اینجا برو (http://iirf.codeplex.com/)
فرقی هم نداره چه لوکال چه سرور.
رول اول میگه هرچی زد بدون هیچ پسوندی با همون اسم فایل aspx براش لود کن
رول دوم هم مگه اگر با پسوند aspx زد همون خودش رو براش لود کن.

برای یاد گرفتنش باید regular expression بخونید.

-------

درمورد سوال خودم من کسی جوابی نداره بده کار با tfs؟ (http://barnamenevis.org/showthread.php?424847-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-tfs&p=1901054)