原文发布时间为:2011-02-24 —— 来源于本人的百度文章 [由搬家工具导入]
例如:把http://www.sofunz.com/house/18649重写到http://www.sofunz.com/Detail.aspx?id=18649
页面其中的CSS和图片会出现引用错误,原本路径为http://www.sofunz.com/pic.jpg 变成了http://www.sofunz.com/house/pic.jpg
页面出现问题!
解决办法:
1.将页面所有CSS和图片设置为绝对路径,即类似/pic.jpg这样的路径,ASP.NET服务器控件的就加~/pic.jpg
2.[个人认为的最佳解决办法] 在页面<head></head>之间添加<base href="<%=basePath%>">,其中<%=basePath%>为你页面所要设置的base路径,例如<base href=http://www.sofunz.com>
// 设置了 <base>后,相对路径,相对于的就是base中的路径,而不再是浏览器地址的请求路径啦~~~
【URL重写后,GridView自带的分页问题尚未解决】
关于处理URLRewrite的PostBack问题,以下属于转载:
大家在使用ASP.NET和重写URL时经常遇到的一个疑难杂症跟处理postback场景有关。具体地来说,当你在一个网页上放置一个 <form runat="server"> 控件时,ASP.NET 会自动地默认输出标识的action属性指向当前所在页面。当使用URL重写时,会出现这样的问题,<form> 控件显示的URL不是原先请求的URL(譬如,/products/books),而是重写过后的URL(譬如,/products.aspx?category=books)。这意味着,当你做一个postback到服务器时,URL不再是你原先干净利落的那个了。
在 ASP.NET 1.0 和1.1 中,大家经常诉诸于继承<form> 控件生成他们自己的控件,来正确地输出要使用的action属性。虽然这可以工作,但结果有点乱,因为这意味着你需要更新你所有的页面来使用这个另外的表单控件,而且有时在Visual Studio所见即所得设计器里也会遇上问题。
好消息是,在ASP.NET 2.0中,有个比较干净的诀窍你可以用来重写<form>控件的action属性。具体地来说,你可利用新的ASP.NET 2.0控件适配器扩展架构来定制控件的输出,用你提供的值来覆盖action属性的值。这不要求在你的.aspx页面里做任何编码改动,而只要在你的/app_browsers文件夹里添加一个.browser文件,注册使用一个控件适配类即可输出新的action属性。
你可在这里查看一个我创建的样例实现,其展示了该如何实现与URL重写协作的表单控件适配器(Form Control Adapter) 。它在我上面使用的第一个(Request.PathInfo),第二个方法(UrlRewriter.Net 模块)中都工作,它使用Request的RawUrl属性获取原先没改写过的 URL来显示。而在第四个方法(ISAPIRewrite过滤器)中,你可以获取ISAPI过滤器保存在Request.ServerVariables["HTTP_X_REWRITE_URL"] 中的原先的URL值。