0

我正在同时处理 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 解析这样的 url(以 开头/common/...)说http://testing/common/...

更新(2011 年 5 月 31 日,美国标准时间下午 7 点):

一直在研究什么是 url 重写,从例子中我明白了一些事情。我不确定我想要的是否是 url 重写本身。再次以 iisexpress 类比,我知道会有一个入站请求 uri,例如:

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

但我希望这实际上由以下 uri 提供:

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

我使用 iisexpress 虚拟化的文件夹中不存在前一个 uri。

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

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

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

甚至这些事情都应该解决给相应的对应http://testing/...方。

ps:我做的都是iis 5.1

4

1 回答 1

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 脚本,您将通过 引用您的 CSS ../common/include/...,即父路径。文件夹结构越深,../您拥有的父路径就越多,因此管理这些相对路径可能会变得混乱。此外,虽然现在不常见,但一些共享托管服务器不允许父路径。

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

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

    在生产中,您将会话值全局设置RootPath/MyApp,但对于测试,请保留为空字符串。你可以Session_OnStart在你的global.asa. 您也可以改用应用程序范围的值Application("RootPath")。这仅适用于 ASP 页面。

  3. URL 重写 - 如果您有静态 HTML 页面,那么 URL 重写可以派上用场。您将在您的开发 PC 上工作的绝对 url 重写为生产服务器上使用的路径。所以基本上每次你看到href="/common/...你都会重写到href="/myapp/common/.... IIS6 不支持开箱即用的重写,您需要第三方工具,例如Iconics IRFHeliconTech 的 ISAPI_Rewrite3。IIS 7.x 确实支持通过URLRewrite Module 2.0重写 URL 。

于 2011-05-31T12:41:07.257 回答