我正在使用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/...
对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
答案 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页面是一个不同的故事,必须使用以下一种或多种机制:
让一切都相对。如果您在网站的根目录中有一个页面或ASP脚本,而不是指定/common/include/...
指定common/include/...
。如果您在子文件夹中有一个页面或ASP脚本,那么您将通过../common/include/...
引用您的CSS,即父路径。文件夹结构越深,您拥有的../
父路径越多,因此管理这些相对路径会变得混乱。此外,虽然现在不常见,但某些共享托管服务器不允许使用父路径。
使用包含路径前缀的变量为CSS路径添加前缀。例如:
<link rel="stylesheet" href="<%=Session("RootPath")%>/common/include/style/css.css"/>
在制作中,您将全局设置会话值RootPath
设置为/MyApp
,但是将测试保留为空字符串。您可以在Session_OnStart
的{{1}}中执行此操作。您也可以使用应用程序范围的值global.asa
。这只适用于ASP页面。
URL重写 - 如果您有静态HTML页面,那么URL重写可以解决。您可以将在开发PC上运行的绝对URL重写为生产服务器上使用的路径。因此,基本上每当您看到Application("RootPath")
时,您都会重写href="/common/...
。 IIS6不支持开箱即用的重写,您需要第三方工具,例如Iconics IRF或HeliconTech's ISAPI_Rewrite3。 IIS 7.x确实支持通过URLRewrite Module 2.0重写URL。