当前位置: 代码迷 >> ASP.NET >> RewritePath()重写Url路径后页面内的相对链接地址出错?解决办法
  详细解决方案

RewritePath()重写Url路径后页面内的相对链接地址出错?解决办法

热度:4536   发布时间:2013-02-25 00:00:00.0
RewritePath()重写Url路径后页面内的相对链接地址出错?
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?mfr=true

根据这个在HttpModule中使用RewritePath()重写Url路径,Url是重新定向到了指定的页面,但指定页面中原来使用的相对路径的图片等地址都出错了,会显示红叉,大家是怎么处理的?

------解决方案--------------------------------------------------------
用绝对路径~~~~~~~~~~~~~~~
------解决方案--------------------------------------------------------
http://www.nickyma.com/blog/article.asp?id=155
http://www.cnblogs.com/teddyma/archive/2006/09/11/500790
看看这两篇文章
------解决方案--------------------------------------------------------
mark, 又多了两篇资料..
------解决方案--------------------------------------------------------
都是相对路径惹的祸!

浏览器在处理相对路径时,是以浏览器上接受的url地址为基础进行计算的,也就是说,如果当前的地址为folder/1.aspx,那么,很显然,./section/2.aspx这个页面,对应的自然是folder/section/2.aspx了,问题就出在这儿了!没有URL重写时,不会有这样的情况出现。但是URL重写,并且,将一个带假目录的虚拟地址重写到一个不带假目录的页面时,由于浏览器客户端和服务端此时的当前页面计算方法是不同的,就会发生相对路径的匹配错误问题!真实很严重的问题啊!

解决的办法,只有使用绝对路径!但是,我们当然不会傻到对每个链接直接使用绝对路径的,呵呵:)

将Default.aspx中的所有相对路径都使用Page.ResolveUrl进行包装如下,在输出页面时就将地址转换为绝对路径,就能解决这个恐怖的相对路径陷阱了。
------解决方案--------------------------------------------------------
这是因为你的图片地址使用了相对路径,重写之后地址发生变化,所以如楼上所说采用绝对路径或者根据规律生成相对路径,我一般是从根目录下面写路径。。。如
/img/xxx/login.jpg
这样也不会有问题。
------解决方案--------------------------------------------------------
/img/xxx/login.jpg

如果是这种方式的话,那应该程序不是安装在根目录下,放在虚拟目录中的话,也还是会有问题。
  相关解决方案