質問

Restletを使用して、Webサービスと同じコンテキストでいくつかの単純な静的コンテンツを提供する必要がありました。 Directory を使用してコンポーネントを設定しましたが、テストでは「index.html」のみを提供し、それ以外はすべて404になります。

router.attach("/", new Directory(context, new Reference(baseRef, "./content"));

そのため... http:// service および http://service/index.html 両方とも機能します、

しかし http://service/other.html は404を返します

これについて誰かが光を当てることはできますか? ./contentディレクトリ内の任意のファイルを利用できるようにします。

PS:最終的にはリバースプロキシを使用して、すべての静的コンテンツを別のWebサーバーから提供する予定ですが、今のところ、これをそのまま使用する必要があります。

役に立ちましたか?

解決

まあ、私は問題を見つけました。実際、Restletはプレフィックスに基づいてリクエストをルーティングするように見えますが、最長一致プレフィックスを正しく処理せず、ファイル拡張子も無視するようです。

たとえば、" / other" ...にリソースが接続されていて、" /"にディレクトリがある場合。そして/other.htmlをリクエストすると、実際に起こるのは" / other"リソース。 (拡張子は無視されますか?)、私が期待するディレクトリの静的ファイルではありません。

これがなぜなのか、またはそれを変更する方法がaynoneにわかっている場合、私は知りたいです。大したことではなく、テストのためだけです。とにかく、本番環境ではこれの前にapacheまたはnginxを配置すると思います。

他のヒント

Restletのルーターは、デフォルトで" Template.MODE_STARTS_WITH"を使用します。マッチングモード。 router.setMatchingMode(Template.MODE_EQUALS)を実行することにより、常にルーターのデフォルトを設定できます。これにより、アタッチのデフォルトで完全一致が有効になります。 setMatchingModeで個々のルートをオーバーライドすることを選択できます。

Restletルーティングに関する優れたドキュメント

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top