使用app.yaml用于运行时从所有URL文件名中删除.html

问题描述 投票:0回答:1

我正在尝试找到有关如何使用app.yaml在Google App Engine上运行时从所有url文件名中删除.html的指南或帮助。如果说实话,我发现Google帮助文档中有关如何使用app.yaml的信息非常令人困惑。

我在大约4个文件夹中有大约350个.html文件。我的app.yaml文件位于根目录中。

如果是.htaccess文件,我将尝试执行以下类似操作。有什么想法或提示吗?

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

[如果我要进一步压缩问题,那么我也希望对此进行设置,因此当我使用Webpack开发服务器并进行构建时,我也可以具有一致的用法/体验(即,在URL上没有.html结尾的作品)但这可能会暂时推动这个问题,如果说实话,我目前还没有对此进行过多研究。

google-app-engine webpack-dev-server app.yaml
1个回答
0
投票

技术上,至少在GAE中,您不是删除 .html后缀,而是添加到请求的路径中以获得要使用的静态资产的名称(我是假设您的实际资产文件的名称中确实带有.html后缀。

可能,取决于您如何构造静态资产的名称空间。

[如果.html文件的子集(或全部)可以由文件路径/名称上的单个正则表达式模式(.html后缀除外)匹配,而该正则表达式模式与其他静态资产不匹配,那么这很容易,您只需要2个处理程序语句。假设下面的静态文件位于您应用的static目录中,请根据需要进行调整。

第一个处理程序语句将为请求提供后缀.html,以防止为它们获取404(否则它们将被转换为类似/path/file.html.html的名称,这可能不是您命名资产的方式)

- url: /(<your_pattern>\.html)$
  static_files: static/\1
  upload: static/<your_pattern>\.html$

第二条语句是将.html后缀“追加”到请求的路径并提供相应资产文件(如果存在的话,或者如果没有的话,则为404):

- url: /(<your_pattern>)$
  static_files: static/\1.html
  upload: static/<your_pattern>\.html$

[一个实际的例子,假设您将.html文件请求为/some/path/<file>.html,并且希望它们也可以以/some/path/<file>的身份访问。然后,您将拥有以下处理程序语句:

# this serves the /some/path/<file>.html requests
- url: /(some/path/.*\.html)$
  static_files: static/\1
  upload: static/some/path/.*\.html$

# this serves the /some/path/<file> requests
- url: /(some/path/.*)$
  static_files: static/\1.html
  upload: static/some/path/.*\.html$

如果您有多个此类子集,则只需为每个子集添加类似的2条语句。但是,如果您有许多这样的子集,则无法扩展。

如果没有这种模式(或者子集太多),可能会更困难。具有第二个盲注/全部捕获处理程序模式的一对语句仍然适用于静态.html文件:

- url: /(.*\.html)$
  static_files: static/\1
  upload: static/.*\.html$

# catch-all pattern
- url: /(.*)$
  static_files: static/\1.html
  upload: static/.*\.html$

但是这可能会干扰其他任何静态文件和应用程序的动态处理程序(如果有)。为了避免这种情况,您需要all可以通过更特定的模式进行识别,并且您必须为它们放置处理程序语句above包罗万象的语句。

© www.soinside.com 2019 - 2024. All rights reserved.