我的Heroku应用程序具有以下Hello world代码。同样在项目的根文件夹中,我有一个favicon.ico

import os
from flask import Flask
app = Flask(__name__)

html = '''
<!doctype html>
<html>
  <head>
    <link rel="shortcut icon" href="/favicon.ico">
    <title>Hello world!</title>
  </head>
  <body>
    <p>Hello world!</p>
  </body>
</html>
'''

@app.route('/')
def index():
    return html

if __name__ == '__main__':
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)


当我浏览到我的应用程序时,没有看到favicon。此外,当我检查heroku logs时,会得到以下404行:

2012-02-14T05:23:29+00:00 app[web.1]: <ip.ad.dr.es> - - [14/Feb/2012 05:23:29] "GET /favicon.ico HTTP/1.1" 404 -


#1 楼

我只是在这里找到它:http://flask.pocoo.org/docs/patterns/favicon/

我对此有所不同,这就是我所做的:


在我的树中,我将图标存储为static/images/favicon.ico


在HTML中,我在<head>中包含以下行:

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



在我的Flask应用中,我有以下用于/favicon.ico的URL处理程序

@app.route('/favicon.ico')
def favicon():
    return send_from_directory(os.path.join(app.root_path, 'static', 'images'),
                               'favicon.ico', mimetype='image/png')


为什么image/png?因为如果我使用image/vnd.microsoft.icon,那么我浏览到http://myapp.heroku.com/favicon.ico,我得到一个下载对话框。 image/png只会在页面上显示收藏夹图标(至少在Chrome上显示)。



#2 楼

我将我的favicon.ico图像放入Rails应用程序的public/文件夹中。然后我部署到了heroku,不得不在新的浏览器出现之前清除浏览器缓存。

#3 楼

这是我使用的方法:

<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">


我相信Internet Explorer的“快捷方式”应该在其中(尽管IE通常会检查favicon)。 />
但是,听起来图标位于错误的位置。您应该能够通过yoursite.com/favicon.ico访问它。您还可以通过在Google Chrome浏览器中查看页面源进行检查,并且/favicon.ico将是带下划线的链接-单击该链接可打开您指定的位置。从您所说的来看,听起来您需要为现有文件设置例外以绕过该应用程序。如果您使用的是Apache,则应使用类似以下的命令:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule your_rule_here [L]


您所使用的平台应具有相同的功能。

评论


这是在Flask上吗?我认为Flask为发送给它的每个URL GET寻找一个处理程序脚本。我仍然得到404。

–套件
2012年2月15日下午0:33

@Kit对不起,老实说,我对Heroku或Flask一无所知。我只是认为该应用程序运行良好,但输出了一些不正确的HTML。

–心怀不满的山羊
2012年2月15日下午0:43