使用Google Appengine with Java删除.html扩展名

时间:2015-09-15 00:22:57

标签: java html google-app-engine

我在这里非常困惑。我一直在使用Google Appengine作为我们的网络服务器,到目前为止它一直很好用,但我有一个请求,要求网页加载时没有.html扩展名。我一直在阅读并看到我需要创建一个app.yaml文件来将网址映射到其他内容?到目前为止,这就是我在文件中的内容:

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

这没关系,当我键入domain.com/about/时,它似乎正在工作,但当我键入domain.com/about时却没有。非常令人沮丧。

2 个答案:

答案 0 :(得分:3)

在理想的世界中,我们可以选择在底层Web服务器中配置像apache的mod_rewrite这样的重写。遗憾的是,无法在这样的级别上配置重写。

我搜索了一下,发现重写的最常见答案是用户UrlRewriteFilterwire up the servlets yourself

中解释了这两个选项

两者都以相同的方式工作,并要求应用通过应用引擎提供静态内容。由于您的所有静态文件都会从Google的内容交付网络(cdn)移至您的瓶颈应用,因此这会导致应用引擎实例时间和响应速度变慢。 aproaches可能还需要您将静态文件部署为资源(How-To configure static-files and resources),至少我以前是这样做的。

这些是您拥有的'纯Java'选项。 app.yaml描述的Josep Valls方法将适用于App Engine上的Java。这里的主要问题是app.yaml配置是否足够低,以至于谷歌在其cdn中识别的重写,或者您是否仍会在实例时间内刻录,因为所有内容都是通过实例提供的。

documentation告诉我们:

  

为了提高效率,App Engine会分别存储和提供静态文件   从应用程序文件。静态文件在。中不可用   应用程序的文件系统。如果您有需要读取的数据文件   通过应用程序代码,数据文件必须是应用程序文件,并且   不得与静态文件模式匹配。

由于这是在解释如何配置静态文件模式处理程序的部分之前,因此应该假设这些处理程序的配置不会破坏上面提到的逻辑 - 即

  

与应用程序文件分开存储和提供静态文件

这个假设是否正确是一个简单的实验,我将按时进行并在此报告我的发现。

这些是我能找到和了解的所有现有选项。如果有人对此主题有更多了解,请发表评论/回复。

编辑(7.12.2015) 我的maven目标appengine:devserver完全忘记了app.yaml中的设置。我将不得不在下一个部署阶段中尝试使用此功能,或使用mvn gcloud:run

......那天晚些时候:

通过Servlet重写URL(与Paul Tuckey's UrlRewriteFilter一样)不适用于静态文件。您必须将文件部署为资源文件。静态文件驻留在其他位置,如果由servlet转发,则无法找到。至少这是我理解它的方式。

答案 1 :(得分:2)

在Python和Go中,您可以在url处理程序中使用正则表达式匹配;如果Java也使用app.yaml你可能会这样做:

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