Asp.net 相对URL、URL重写和虚拟目录——天哪!

Asp.net 相对URL、URL重写和虚拟目录——天哪!,asp.net,iis,Asp.net,Iis,我们目前正在使用共享主机以节省成本。我们的公共网站和SaaS产品位于共享主机上的虚拟目录(/app和/public)下。我们为我们的客户(即client1.myproduct.com)提供了虚荣子域,因此我们有一些重写规则来确保一切正常工作 有点与实际问题无关,但我们设置它的方式是,如果HTTP_HOST参数不是以www开头的,并且如果子域不是空的,那么我们将重定向到/app,否则我们将显示根中的内容 但是,相对URL会出现问题。比如说, ~/Scripts/jQuery.js 决心 /app

我们目前正在使用共享主机以节省成本。我们的公共网站和SaaS产品位于共享主机上的虚拟目录(/app和/public)下。我们为我们的客户(即client1.myproduct.com)提供了虚荣子域,因此我们有一些重写规则来确保一切正常工作

有点与实际问题无关,但我们设置它的方式是,如果HTTP_HOST参数不是以www开头的,并且如果子域不是空的,那么我们将重定向到/app,否则我们将显示根中的内容

但是,相对URL会出现问题。比如说,

~/Scripts/jQuery.js
决心

/app/Scripts/jQuery.js
但多亏了重写规则,您实际上可以通过

/Scripts/jQuery.js
显然,我可以将所有URL更改为绝对URL(即
/Scripts/jQuery.js
而不是
~/Scripts/jQuery.js
),但出于明显的原因,这是次优的

它看起来像是使用
ResolveUrl
之类的函数来解析相对URL。有可能在某个地方覆盖它的值吗?有没有更好的方法来处理我错过的事情呢?

Brad

在不知道您正在使用什么重写URL的情况下,回答这个问题有点困难。在过去,人们倾向于使用他们应用程序的web.config中定义的东西,它的处理方式超过了早期的ISAPI驱动程序操作

例如,Helicon的ISAPIRewrite很早就发生了,而IIS7最近的URL重写则在处理过程中稍晚发生

它还可以帮助您查看实际的重写规则,包括它们的条件、要匹配的正则表达式模式和要输出的重写模式

也就是说,除非我过于简单化,否则您不能简单地检测URL何时以波浪号“~”作为前缀,并在早期规则中删除它。(标记该规则以继续执行其余规则)

然后,当处理下一条规则时,它将使用以“/”开头的相对URL模式进行处理


如果我遗漏了什么,请告诉我,如果遗漏了,请提供我上面提到的信息。

我不明白:重写规则是好是错?如果重写规则指向错误的url,为什么不更改它?