2015-09-15 4 views
11

私は信じられないほど混乱しています。私はWeb ApperineをWebサーバーに使用していましたが、これまでのところうまくいきましたが、.html拡張子なしでWebページをロードするように要求しました。私はいくつかの読書をしてきたし、URLを別のものにマップするためにapp.yamlファイルを作成する必要があることがわかりましたか?これは私がこれまでのところ、私のファイルに持っているものです。Google Appengine with Javaを使用して.html拡張子を削除する

application: company-website 
version: 1 
runtime: java 
threadsafe: true 

handlers: 
    - url: /about 
    script: about.html 

私は彼らのドキュメントサイト上でこれを行う方法を読み取ろうとしてきたが、私は何も拡張子を削除する方法を参照し、まだ見つけることができないようそれは正しいhtmlファイルを指しています。誰か助けてくれますか? appengine-web.xmlファイルでもこれを行うことはできますか? app.yamlファイルを作成せずにそこで実行できるようです。

ご協力いただければ幸いです。ありがとう!

編集:

/root 
    -index.html 
    -/about 
    -index.html 

そして、私は私を入力すると、これは、OKだった:が..私はそうのような独自のフォルダへの拡張を削除しようとしているファイルを移動しようとしたいくつかのより多くの事を試してみましたdomain.com/about/それは働いているように見えますが、私がdomain.com/aboutと入力してもそれはありません。非常にイライラ。

+0

この解決策を見てください:http://stackoverflow.com/a/20220633/3245762 – hbelmiro

+0

私はJavaでこれを試すと、mime_typeがハンドラのプロパティであることを認識しませんJavaがこれらのオプションを持っているとは思わない – shanling

+0

私はJavaについて知りませんが、Pythonでは 'strict_slash = True'を設定して、余分な'/'を入力する必要がないことを示します。 –

答えて

2

PythonとGoでは、あなたのurlハンドラで正規表現マッチングを使うことができます。 Javaはまた、あなたはおそらくこれを行うことができますapp.yamlを使用している場合:

- url: /(about|other|sections)$ 
    static_files: \1\.html 
+0

ありがとう! app.yamlはJavaランタイムで動作しますが、通常はJavaアプリケーションの設定に使用されるweb.xmlファイルとappengine-web.xmlファイルが上書きされます。 (出典:https://books.google.com/books?id=64oNCgAAQBAJ&pg=PA57&lpg=PA57&dq=app+engine+java+app.yaml)。ところで、上記の式で '\ 1'の役割は何ですか? – Price

+1

正規表現でカッコを使用すると、\ 1 - \ 99を使ってそれぞれのマッチを参照できます。正規表現が/(\ w +)/(\ w +)/などの場合は、\ 1を使用してパスの最初の部分を置き換え、2番目の部分を置き換えることができます。詳細はこちら:http://www.rexegg.com/regex-capture.html –

+0

@JosepValls私は好奇心が強いです。 Google(すべて)は、アプリエンジンの静的コンテンツがGoogleのCDNを介してキャッシュされ配信されていることを認識しています。しかし、URLをJavaサーブレットで書き直す場合、リクエストはCDNをcurcumventingするアプリケーションエンジンを介してルーティングする必要があります。あなたの提案されたアプローチでは、要求がアプリケーションエンジンのインスタンスに当たったり、書き換えられたコンテンツを静的なものとして公開してCDNによってキャッシュされて提供されるような低レベルの設定(サーバ設定など)ですか?短く:再書き込みの原因となったアプリエンジンがインスタンスを起動させますか? – konqi

3

を理想的な世界では、我々は、基礎となるWebサーバ内のApacheのmod_rewriteのような書き換えを設定するオプションを持っているでしょう。残念ながら、そのようなレベルでリライトを設定することはできません。

私はちょっと調べて、書き換えの最も一般的な答えはユーザーUrlRewriteFilterまたはwire up the servlets yourselfのいずれかであることを発見しました。両方のオプションは、同じように

で仕事の両方を説明されているアプリエンジンを介して、静的なコンテンツを提供するためのアプリが必要になります。静的ファイルはすべてGoogleのコンテンツ配信ネットワーク(cdn)からボトルネックアプリに移動するため、アプリエンジンのインスタンス時間と応答が遅くなります。 aproachesはおそらく、静的ファイルをリソースとして(How-To configure static-files and resources)代わりに配備する必要があります。これは少なくとも前にこのようにしています。

これらは「純粋なJava」オプションです。説明されているJosep Vallsapp.yamlアプローチは、App EngineのJavaで動作します。ここでの主な質問は、app.yamlの設定が低レベルで、googleがそのCDNで認識した書き換えであるかどうか、またはすべてのコンテンツがインスタンスを通じて配信されるため、インスタンス時間を使い切るかどうかです。 、効率のため

App Engineの店舗と別に アプリケーションファイルから静的ファイルを提供しています:

documentationは教えてくれる。静的ファイルは、アプリケーションのファイルシステム では使用できません。アプリケーションコードで と読む必要があるデータファイルがある場合、データファイルはアプリケーションファイルでなければならず、 は静的ファイルパターンと一致していてはなりません。

ある - これ以来

は右 1は、このようなハンドラの構成は上記されたロジックを壊さないであろうことを想定する必要があり静的ファイルパターンハンドラを設定する方法について説明セクションの前に来ます

店舗と、この仮定が正しいかどうか、アプリケーションファイル

別に静的ファイルを提供しています、私は与えられた時間を行い、私のfindinを報告しなければならない。簡単な実験でありますここにgs。

これらはすべて私が見つけて知ることができる既存のオプションです。このトピックについてもっと知っている人は、コメントしてください。

EDIT(2015年7月12日) マイMavenの対象appengine:devserverは、app.yamlをの設定を完全に忘れています。次の展開段階の1つでこれを試してみるか、mvn gcloud:runを使用してください。後でその日

...:サーブレット(Paul Tuckey's UrlRewriteFilterと同様)を介してURLを書き換え

は静的ファイルでは動作しません。ファイルをリソースファイルとして展開する必要があります。静的ファイルは別の場所にあり、サーブレットによって転送された場合は見つかりません。少なくともそれは私がそれを理解する方法です。

関連する問題