为什么当我添加额外的寻址级别时,Sinatra应用程序中没有显示图片?

时间:2015-07-28 00:28:12

标签: html ruby sinatra

我的Sinatra应用程序具有典型的文件层次结构: root包含:

file“hc.rb” 档案“endpoints.yml” dir“views” dir“public”

“view”包含.erb文件

公共目录包含:

file“style.css” dir“images”

在dir图片中我有favicon和404张照片。

这是代码的一部分:

not_found.erb

<center><img src="images/404.png" alt="404 Not Found"></center>

hc.rb

not_found do
  erb :not_found
end

layout.erb

<!doctype html>
<html lang="en">
<head>
 <title></title>
 <link rel="icon" href="images/favicon.ico"/>
 <meta charset="utf-8">
 <link rel="stylesheet" href="styles.css">
</head>
<body>
 <header>
 </header>
 <section>
    <%= yield %>
 </section>
</body>
</html>

当我输入localhost:[port] / smthnonexisting

我在屏幕上显示404图像

但是当我输入其他级别时

本地主机:端口] / smthnonexisting / andsmthmore

我没有看到图像,我只看到404 Not Found和破碎的图像ico。

可能是什么原因?

由于

1 个答案:

答案 0 :(得分:1)

原因是您正在使用相对于当前文件夹的路径。当您访问http://localhost/smthnonexisting时,您的浏览器正在styles.css查找/styles.css文件。当您访问http://localhost/smthnonexisting/andsmthmore时,您的浏览器正在styles.css查找/smthnonexisting/styles.css文件。

这可以通过/之前的styles.css保持与'root'文件夹相关的引用来解决,如下所示:

<link rel="stylesheet" href="/styles.css">

您还应该对favicon和任何其他包含的文件执行相同的操作:

<link rel="icon" href="/images/favicon.ico" />