2

Djangoアプリを作成して、サーバーの静的ページ(おそらくS3に保存されている)を生成して後で作成することを計画しています。ユーザーがmysite.com/static-pages/12345のようなURLにアクセスすると、12345.htmlという名前のS3バケット内の静的ファイルが提供されます。その静的ファイルは、たとえば、私のサイトがユーザーのために生成したブログページの静的htmlページである可能性があります。

これは、DjangoテンプレートとSQLデータベースの使用方法をすでに知っているため、DjangoテンプレートとしてレンダリングされるページにCSS / Javascriptファイルなどの静的リソースを含めることとは異なります-私にはなじみのないことは、私の「データ」がデータベースのエントリではなくS3であり、実際にテンプレートを使用する必要はありません。

要求されたデータ(つまり静的ページ)をどの程度正確に取得してユーザーに返すことができますか?当然のことながら、パフォーマンスのペナルティを最小限に抑えたいと思いますが、もちろん、ユーザーがS3から静的ページを直接リクエストした場合は最速になります(これは望まない)」。

いくつかの追加の質問:データベースにhtmlページを保存するdjango flatpagesアプリについて他の場所で読んだことがありますが、静的htmlページはS3などのファイルシステムに保存するのが最適なようです。リクエストをDjangoアプリケーションに送信し、S3にファイルを直接提供させながら、アプリケーションから送信されたように見せかける方法はありますか(つまり、ブラウザーのURLにはmysite.com/static-pages/12345と表示されますが、ページが私のDjangoサーバーを通過しませんでした)?

どうもありがとう!

4

2 に答える 2

0

Amazon S3はURLの書き換えをサポートしていないため(Webサーバーではありません)、URLを書き換えることができるWebサーバーまたはサービスにリクエストをプロキシする以外に選択肢はありません。

制御しているWebサーバーを使用し、ここの指示に従ってApacheにURLを書き換えさせることもできますが、全体が静的Webサイトをロードしている場合、それはやや無駄に思えます。

または、純粋にS3を使用したい場合に機能する可能性のあるソリューションがあります。

404の場合にユーザーのブラウザに返されるHTMLドキュメント(エラードキュメント)を指定するオプションがあります。現在のURLをチェックする小さなHTMLページを作成し、window.locationを変更して、.html拡張子なしで「書き換えられた」URLに移動することができます。

<html>
<script>
    var slash = window.location.lastIndexOf("/");
    var dot = window.location.lastIndexOf(".");

    if (slash < dot) && (dot != -1) {
        window.location = window.location + ".html";
    }
</script>
</html>

明らかに、より堅牢にしたいと思うでしょうが、あなたはその考えを理解します。

欠点は、URLを使用した静的ページの各リクエストにより、ユーザーのブラウザからサーバーへの追加のラウンドトリップが行われることです(404ページに対して1回、実際のページを取得するために1回)。

また、次のようなチェックを追加して、実際のURLが正しくない場合に404​​ループがトリガーされないように、上記のコードを調整する必要があります。

var loopcheck = window.location.IndexOf(".html");
if (lookcheck != -1) {
    window.location = "real404.html";
    return;
}

お役に立てば幸いです。

于 2013-03-06T07:16:10.087 に答える
0

/static-pages/12345/ フォルダー内に index.html を作成するだけで、それが提供されます。

于 2013-04-03T08:38:19.947 に答える