web.py开发服务器 - 网站图标.ico - 404未找到

11

在使用web.py开发服务器运行应用程序时,如何消除favicon的404错误?

"HTTP/1.1 GET /" - 200 OK
"HTTP/1.1 GET /favicon.ico" - 404 Not Found

我查到的有关消除这个错误的所有信息都与在Apache配置中指定资源路径有关。显然,这对于开发服务器使用情况没有帮助。是否有一种方法可以在urls元组中指定静态资源?您可以在web.py应用程序中定义文档根目录吗?

4个回答

7
像Ryan Griggs建议的那样,但是使用/static/favicon.ico作为href。
<html>
<head>
    <link rel="icon" type="image/png" href="/static/favicon.ico">
    ...

web.py开发服务器将所有/static/ URL映射到static/目录中的文件。


5

Web.py API文档提到了一个'web.seeother()'函数,它生成一个"303 SEE OTHER"响应,将浏览器重定向到另一个位置。
(请参见http://webpy.org/docs/0.3/api#web.application)

这是一个服务器端解决方案,不需要在html文件中更改头文件;如果服务器实际上没有处理html文件,则特别有用。

解决方案:

从默认的/favicon.ico映射url路由,并创建一个新的类来处理此路由:

# Define API Routes
urls = (
    '/', 'index',
    '/favicon.ico', 'icon'
)

创建一个(可通过web访问的)静态目录,其中包含favicon.ico文件。
创建一个新的类来处理此文件:
# Process favicon.ico requests
class icon:
    def GET(self): raise web.seeother("/static/favicon.ico")

这是我的服务器日志,显示了请求:

<ip#> - [18/Oct/2013 21:54:54] "HTTP/1.1 GET /favicon.ico" - 303 See Other
<ip#> - [18/Oct/2013 21:54:54] "HTTP/1.1 GET /static/favicon.ico" - 200
<ip#> - [18/Oct/2013 22:03:02] "HTTP/1.1 GET /favicon.ico" - 303 See Other
<ip#> - [18/Oct/2013 22:03:03] "HTTP/1.1 GET /static/favicon.ico" - 304 Not Modified

2

浏览器会自动在您网站的根目录中查找 /favicon.ico 文件。这个错误只是意味着文件 'favicon.ico' 不存在。只需创建一个图标文件(或从众多网站中下载一个 favicon 创建器),并将其放置在您网站的根目录(public_html 等)中即可。

为了更好的解决方案,编辑您网页的 HTML,包含指向 favicon 文件的特定链接:

<html>
<head>
    <link rel="icon" type="image/png" href="http://example.com/myicon.png">
    ...

请参见http://www.w3.org/2005/10/howto-favicon

我记得在某个地方看到过,一些版本的IE需要rel="shortcut icon" - 但是现在好像找不到了。 - Jon Clements
1
我有一个网站图标,就在应用程序代码旁边的项目根目录中。我尝试将它移到项目中的各个位置,像是/static,但我仍然收到错误信息。问题在于 web.py 开发服务器不知道在哪里可以找到它,而我也不知道如何告诉它该去哪里寻找。 - tponthieux

1

由于web.py仅限您使用/static路径处理静态数据,因此实际上没有正确提供开发服务器的favicon的方法。摆脱404日志的最佳方法是在映射中添加URL处理程序:

urls = ("/favicon.ico", "dummy")

dummy 处理程序中,只需传递一个空的 200 响应即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接