我在这里非常困惑。我一直在使用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
时却没有。非常令人沮丧。
答案 0 :(得分:3)
在理想的世界中,我们可以选择在底层Web服务器中配置像apache的mod_rewrite这样的重写。遗憾的是,无法在这样的级别上配置重写。
我搜索了一下,发现重写的最常见答案是用户UrlRewriteFilter或wire 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