10

開発サーバーでweb.pyアプリケーションを実行する場合、ファビコンの404エラーをどのように取り除くのですか?

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

このエラーを排除することについて私が見つけたすべてのことは、Apache構成でリソースへのパスを指定することと関係があります。これは明らかに、開発サーバーのユースケースには役立ちません。URLタプルで静的リソースを指定する方法はありますか?web.pyアプリケーションでドキュメントルートを定義できますか?

4

4 に答える 4

5

Ryan Griggsが提案したように、ただし/static/favicon.icoをhrefとして使用します。

<html>
<head>
    <link rel="icon" type="image/png" href="/static/favicon.ico">
    ...

web.py devサーバーは、すべての/static/URLをstatic/ディレクトリ内のファイルにマップします。

于 2012-07-25T01:52:05.470 に答える
5


web.py APIドキュメントは、ブラウザを別の場所にリダイレクトする「303SEEOTHER」応答を生成する「web.seeother()」関数を参照しています。
http://webpy.org/docs/0.3/api#web.applicationを参照してください)

これは、htmlファイルのヘッダー変更を必要としないサーバー側のソリューションです。サーバーが実際にhtmlファイルを処理していない場合に特に便利です。

解決:

デフォルトの/favicon.icoからURLルートをマップし、このルートを処理するための新しいクラスを作成します。

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

favicon.icoを含む(Webアクセス可能な)静的ディレクトリを作成します

このファイルを処理するための新しいクラスを作成します。

# 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
于 2013-10-19T02:21:21.427 に答える
2

ブラウザは、Webサイトのルートディレクトリで/favicon.icoファイルを自動的に検索します。このエラーは、ファイル'favicon.ico'が存在しないことを意味します。アイコンファイルを作成して(または多くのファビコンクリエーターサイトの1つからダウンロードして)、WebサイトのルートWebディレクトリ(public_htmlなど)に配置するだけです。

より良い解決策として、WebページのHTMLを編集して、ファビコンファイルへの特定のリンクを含めます。

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

http://www.w3.org/2005/10/howto-faviconを参照してください

于 2012-07-24T16:39:35.697 に答える
1

web.py静的データのパスのみを操作するように制限されているため、開発サーバーで/static正しくサービスを提供する方法は実際にはありません。favicon404ログを取り除く最良の方法は、マッピングにURLハンドラーを追加することです。

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

dummyハンドラーでは、空の200応答を渡すだけです。

于 2012-07-24T23:57:24.820 に答える