部署网站时相对路径不起作用

时间:2010-03-09 17:38:45

标签: asp.net-2.0 windows-server-2003

我有一个网站,其相对路径指向样式表,看起来像这样的“/stylesheets/main.css”。现在,当我在Visual Studio中运行该站点时,此工作正常。但是当我将站点部署到Windows Server 2003时,路径停止工作。如果我返回代码并将路径从“/stylesheets/main.css”更改为“stylesheets / main.css”,则该站点在服务器上正常工作。我在另一台使用相同路径样式(“/stylesheets/main.css”)和样式表的服务器上有另一个网站,没有任何问题。我真的不想改变所有的路径,甚至不确定这是代码或服务器的问题。任何帮助或想法都会很棒。感谢。

7 个答案:

答案 0 :(得分:10)

网站是否部署到域的根目录?如果该网站位于

http://example.com/somefolder/

然后路径/stylesheet/main.css将被解释为

http://example.com/stylesheet/main.css

而不是

http://example.com/somefolder/stylesheet/main.css

正如@Kit指出的那样,您可以通过解析应用程序文件夹的路径来解决此问题。我经常在ASP.NET中这样做:

<link rel="stylesheet" type="text/xss" href="<%= ResolveUrl("~/stylesheet/main.css") %>"/>

如果那不是问题,那么你将不得不提供更多细节。

答案 1 :(得分:3)

在ASP.NET中,很多时候您需要使用代字号(~)来获取 应用程序 的根目录,因此您的路径看起来像~/stylesheets/main.css

当您指定以/开头的路径时,您指示服务器 root,因此如果您将站点放在虚拟目录中,则不会将其考虑在内,但如果该网站作为默认网站托管,路径将符合条件:

示例:名为foo.net的服务器,其站点位于名为app的虚拟目录中 /stylesheet将转换为foo.net/stylesheet 而不是 foo.net/app/stylesheet

答案 2 :(得分:0)

最好不要使用相对路径,而是使用相对于服务器的完整路径。您可以通过在服务器上处理文档的标记来完成此操作。所以,像这样:

<head runat="server">
  <link href="~/stylesheet/main.css" type="text/css" rel="stylesheet" />
</head>

代字号(〜)表示您来自网站的根目录。这样做的原因是因为您正在处理服务器上的头部。请注意,这也适用于在服务器上处理的任何其他标记。

答案 3 :(得分:0)

表单的网址路径

/path_preceded_by_a_slash

不是相对路径...它是一个绝对路径,表示路径搜索应该从DocumentRoot开始,而不是包含请求文档的目录。

也许这就是你的问题。你应该使用相对路径,但你没有正确地做到这一点。

答案 4 :(得分:0)

使用绝对路径(例如/images/cool_image.gif')时,根文件夹是IIS设置的应用程序根文件夹。

同样棘手的是,如果您使用的是Visual Studio ASP .NET Web 应用程序项目,则在IIS或Web Hosting中设置Web应用程序时会设置应用程序的根目录控制面板。

如果您正在使用Visual Studio ASP .NET Web 站点项目,那么应用程序将自动“动态”编译,并且根目录可能是一般的IIS根文件夹,因为没有应用程序需要在IIS中明确设置。这不太可能与您的应用程序的实际根目录一致,因此在“网站”项目中应避免使用这种绝对路径。

有关Visual Studio“网站”与“网络应用程序”的讨论,谷歌搜索 - 这是一个热门话题。

答案 5 :(得分:0)

我知道这是一个旧线程,但对于未来的读者,我想补充一点,我注意到有时要使虚拟路径工作是必须从头部和拖动时删除runat =“server”部分任何属于主文件夹的页面中的文件,您需要从路径中删除“〜”或“...”。 像这样的东西:

    <!DOCTYPE html>

<html>
<head>
 <script src="javascript/Red/jquery.min.js"></script>
</head>

答案 6 :(得分:0)

这对我有用:

<script type="text/javascript" src="<%= ResolveUrl("~/Scripts/jquery-1.8.3.min.js") %>"></script>