为了开发目的,将URL解析为其他URL

时间:2011-05-31 07:02:20

标签: url-rewriting iis-5 iis-express resolve

我正在使用asp和asp.net页面。我想在我的本地iis(v5.1)中托管该应用程序,但后来了解到iisexpress适合我的需求。但无论我使用iis 5.1还是iis express,我似乎都有问题。

我使用的asp页面指的是驻留在不同虚拟目录中的静态资源(css,javascript等)。对于例如css文件包含如下所示。

<link rel="stylesheet" href="/common/include/style/css.css"/>

如果这样的事情应该从测试环境运行,那么上面的url将解析为:

http://testing/common/include/style/css.css

这与我的主要应用程序所在的情况形成鲜明对比。这看起来像是:

http://testing/myapp/default.aspx

现在如果我在端口8082中运行iisexpress,并且有一个入站请求,如:

http://localhost:8082/common/inlcude/style/css.css

它会遇到404错误。是否有可能指示iss或iis express解析此类网址(以/common/...开头)来说http://testing/common/...

更新(2011年5月31日,下午7点4分IST):

对url重写的内容进行了一些研究,并从示例中我了解了一些事情。我不确定我想要的是网址重写本身。再次采用iisexpress类比,我知道会有一个入境请求,如:

http://localhost:8082/common/inlcude/style/css.css

但我希望这实际上由以下uri服务:

http://testing/common/include/style/css.css

以前的uri在我使用iisexpress进行虚拟化的文件夹中不存在。

我需要在这里重写网址吗?

此外,在ASP中,我包括如下行:

<!-- #include virtual="/common/include/classes/utils.asp" -->

即使这些事情也应该解决给相应的http://testing/...同行。

ps:我正在做的就是iis 5.1

1 个答案:

答案 0 :(得分:0)

在ASP.NET 2.0及更高版本中,您可以使用代字号运算符(~),该运算符用于指定应用程序的根目录。例如:

<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />

会产生相对网址:

<link href="Styles/Site.css" rel="stylesheet" type="text/css" />

这适用于ASP.NET页面。

经典ASP和静态HTML页面是一个不同的故事,必须使用以下一种或多种机制:

  1. 让一切都相对。如果您在网站的根目录中有一个页面或ASP脚本,而不是指定/common/include/...指定common/include/...。如果您在子文件夹中有一个页面或ASP脚本,那么您将通过../common/include/...引用您的CSS,即父路径。文件夹结构越深,您拥有的../父路径越多,因此管理这些相对路径会变得混乱。此外,虽然现在不常见,但某些共享托管服务器不允许使用父路径。

  2. 使用包含路径前缀的变量为CSS路径添加前缀。例如:

    <link rel="stylesheet" href="<%=Session("RootPath")%>/common/include/style/css.css"/>
    

    在制作中,您将全局设置会话值RootPath设置为/MyApp,但是将测试保留为空字符串。您可以在Session_OnStart的{​​{1}}中执行此操作。您也可以使用应用程序范围的值global.asa。这只适用于ASP页面。

  3. URL重写 - 如果您有静态HTML页面,那么URL重写可以解决。您可以将在开发PC上运行的绝对URL重写为生产服务器上使用的路径。因此,基本上每当您看到Application("RootPath")时,您都会重写href="/common/...。 IIS6不支持开箱即用的重写,您需要第三方工具,例如Iconics IRFHeliconTech's ISAPI_Rewrite3。 IIS 7.x确实支持通过URLRewrite Module 2.0重写URL。