【问题标题】:Relative path not working when website is deployed部署网站时相对路径不起作用
【发布时间】:2011-01-25 13:14:38
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    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") %>"/>
    

    如果这不是问题,您将不得不提供更多细节。

    【讨论】:

    • 感谢这确实有很大帮助。但是我必须在同一个站点上使用不同方式的组合才能使其正常工作。 "/default.aspx" 到 "" "/default.aspx" 到 "~/default.aspx" url('/images/top.gif') 到url('../images/top.gif') 甚至在一种情况下也必须保留旧的路径类型(“/stylesheets/main.css”)。这对我来说似乎很奇怪,我以前从未遇到过这个问题,但我想这似乎成功了。
    • 在css文件中指定路径时如何解决这个问题,所以我不能调用Resolve()方法?
    • @sll,CSS 已经解析了相对于样式表的相对路径,因此不需要路径修改。
    • 嗨 Harpo - 我在这里有一个类似的查询 - 我有一个站点之前所有路径都是相对的,但我现在需要包含虚拟目录名称 - 这可能吗 - stackoverflow.com/questions/27513113/…
    【解决方案2】:

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

    当您指定以 / 开头的路径时,您表示 server 根目录,因此如果您的站点位于虚拟目录中,则不会考虑它,但如果站点作为默认站点托管,路径将符合条件:

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

    【讨论】:

    • 嗨 Kit - 我在这里有一个类似的查询 - 我有一个站点,所有路径以前都是相对的,但我现在需要包含虚拟目录名称 - 这可能吗 - stackoverflow.com/questions/27513113/…
    • @TheRiddler 我仔细查看了您链接的问题,我必须同意最佳答案(此时)。更新所有相关链接以了解应用程序目录(使用~)应该值得您花时间。我认为如果您将应用程序和站点设置为相同的东西,那么领先的 ~ 将有效地发挥与 / 相同的功能,但反过来不行,这有意义吗?
    • 感谢工具包,我想我可以将它托管在与 iis 上的默认网站相同的级别,并且相对路径将起作用
    【解决方案3】:

    最好不要使用相对路径,而是使用相对于服务器的完整路径。您可以通过在服务器上处理文档的标签来做到这一点。所以,是这样的:

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

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

    【讨论】:

      【解决方案4】:

      表单的 URL 路径

      /path_preceded_by_a_slash
      

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

      也许这是你的问题。您应该使用相对路径,但您没有正确使用。

      【讨论】:

        【解决方案5】:

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

        顺便说一句,如果您使用的是 Visual Studio ASP .NET Web Application 项目,那么当您在 IIS 或 Web 托管中设置 Web 应用程序时会设置应用程序的根目录控制面板。

        如果您使用的是 Visual Studio ASP .NET Web Site 项目,则应用程序会“即时”自动编译,并且根目录可能是一般的 IIS 根文件夹,因为没有应用程序需要在 IIS 中显式设置。这不太可能与您的应用程序的实际根目录一致,因此在“网站”项目中应避免使用此类绝对路径。

        有关 Visual Studio“网站”与“Web 应用程序”的讨论,请在 Google 上搜索 - 这是一个热门话题。

        本

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

            这对我有用:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-07-12
              • 1970-01-01
              • 1970-01-01
              • 2013-02-19
              • 2015-08-30
              • 2011-03-17
              相关资源
              最近更新 更多