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