相对URL,URL重写和虚拟目录 - 哦,我的!

时间:2010-08-11 16:54:25

标签: asp.net iis

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

对实际问题有点不确定,但我们如何设置它是因为HTTP_HOST参数不是以www开头,如果子域不为空,那么我们重定向到/ app,否则我们显示在根

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

~/Scripts/jQuery.js

解析为

/app/Scripts/jQuery.js

但是由于重写规则,您实际上是通过

导航到脚本
/Scripts/jQuery.js

显然,我可以将所有网址更改为绝对网址(例如/Scripts/jQuery.js而不是~/Scripts/jQuery.js),但这显然是次优的。

看起来像ResolveUrl这样的函数使用TemplateSourceDirectory来解析相对URL。是否有可能在某处覆盖它的价值?有没有更好的处理方法,我错过了?

1 个答案:

答案 0 :(得分:1)

布拉德,

如果不知道您使用什么来重写网址,就很难回答。在过去,人们倾向于使用应用程序的web.config中定义的东西,这些东西处理过早期的ISAPI驱动程序操作。

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

这也有助于查看您的实际重写规则,包括它们的条件,要匹配的正则表达式模式以及要输出的重写模式。

那就是说,除非我过分简化,否则你不能简单地检测URL何时以波形符“〜”作为前缀并在之前的规则中删除它。 (将该规则标记为继续执行其余规则)

然后,当您处理下一个规则时,它会使用以“/".

开头的相对URL模式进行处理

如果我错过了某些内容,请告诉我,如果有,请提供我上面提到的信息。