Gorilla Toolkit の Mux パッケージを使用して URL ルーティングを実装する場合、サブディレクトリから静的コンテンツを提供するときに共通の課題が発生します。この記事では、PathPrefix メソッドを利用してこの問題の解決策を検討し、静的ファイルにアクセスするときに発生する 404 エラーを解決する方法について説明します。
次のシナリオを考えてみましょう。 : 次のファイルとディレクトリ構造を持つ Go Web サーバーがあります:
... main.go static\ | index.html | js\ | <js files> | css\ | <css files>
main.go ファイルで、次のように定義しました。
func main() { r := mux.NewRouter() r.Handle("/", http.FileServer(http.Dir("./static/"))) r.HandleFunc("/search/{searchTerm}", Search) r.HandleFunc("/load/{dataId}", Load) http.ListenAndServe(":8100", nil) }
ブラウザで http://localhost:8100 にアクセスすると、index.html が正常にレンダリングされます。ただし、サブディレクトリ内の CSS および JavaScript ファイルにアクセスしようとすると、404 エラーが発生します。
この問題を解決するには、mux パッケージによって提供される PathPrefix メソッドを採用します。このメソッドを利用すると、すべての静的ファイルに共通のパス接頭辞を指定し、そのパス接頭辞にハンドラーを割り当てることができます。
func main() { r := mux.NewRouter() r.HandleFunc("/search/{searchTerm}", Search) r.HandleFunc("/load/{dataId}", Load) r.PathPrefix("/").Handler(http.FileServer(http.Dir("./static/"))) http.ListenAndServe(":8100", r) }
PathPrefix("/").Handler を使用すると、基本的に、「/」で始まるパスについては、FileServer ハンドラーに従わなければならないと言っているのです。これにより、css/ や js/ などのサブディレクトリ内の静的ファイルも含め、static/ ディレクトリ内のすべての静的ファイルが正しく提供されるようになります。
以上がGorilla Mux の PathPrefix を使用して静的コンテンツを提供するときに発生する 404 エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。