将应用引擎Flex Env​​部署的网站的域的所有网址重定向到index.html

时间:2018-07-04 18:45:03

标签: html google-app-engine deployment web yaml

我今天开始建立我的产品网站。 我遵循了一些网上教程,这些教程教您如何在Google App Engine上部署静态网站。 并且已经成功部署。

但是,当我尝试自定义index.html的URL时,通过直接指向index.html位置来破坏index.html文件。

我成功的网站:Link Here Prove image

失败情况:Link Here Prove image

我的app.yaml文件: App.yaml

两种情况之间的区别只是URL的最后一个字符“ /”。 我不知道为什么index.html会以“ /”结尾。重定向处理程序应重定向到相同的文件位置...


更新:

经过多次测试。我发现问题与app.yaml中的运行时环境有关。 当env:flex时,我的网站运行良好。 并且在env时中断:(除了flex以外的任何静态) 所以,有两种方法可以解决:

  1. 使用flex环境。但我不知道如何重定向到index.html,因为在尝试后发现-handlers在flex env中不起作用。

  2. 保持静态环境轻松路由。但是问题是如何使网站保持良好状态。

请帮助...


第二次更新

重建并部署所有内容之后。 我的网站现在可以使用了。 但是,它仅适用于https://koki-6hats.appspot.com/index.html

对于其他情况,例如:

https://koki-6hats.appspot.com/index

https://koki-6hats.appspot.com/

https://koki-6hats.appspot.com/shouldGoToIndex.html

不起作用。 如何配置路由规则,以确保上面的所有链接都可以自动重定向到index.html?


第三次更新

感谢Alex和GAEfans回答了我的问题!

这是我当前的app.yaml:

runtime: python27
api_version: 1
threadsafe: true

default_expiration: "3m"

handlers:

- url: /(.*\.(appcache|manifest))
  mime_type: text/cache-manifest
  static_files: static/\1
  upload: static/(.*\.(appcache|manifest))

- url: /(.*\.atom)
  mime_type: application/atom+xml
  static_files: static/\1
  upload: static/(.*\.atom)

- url: /(.*\.crx)
  mime_type: application/x-chrome-extension
  static_files: static/\1
  upload: static/(.*\.crx)

- url: /(.*\.css)
  mime_type: text/css
  static_files: static/\1
  upload: static/(.*\.css)

- url: /(.*\.eot)
  mime_type: application/vnd.ms-fontobject
  static_files: static/\1
  upload: static/(.*\.eot)

- url: /(.*\.htc)
  mime_type: text/x-component
  static_files: static/\1
  upload: static/(.*\.htc)

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

- url: /(.*\.ico)
  mime_type: image/x-icon
  static_files: static/\1
  upload: static/(.*\.ico)

- url: /(.*\.js)
  mime_type: text/javascript
  static_files: static/\1
  upload: static/(.*\.js)

- url: /(.*\.json)
  mime_type: application/json
  static_files: static/\1
  upload: static/(.*\.json)

- url: /(.*\.m4v)
  mime_type: video/m4v
  static_files: static/\1
  upload: static/(.*\.m4v)

- url: /(.*\.mp4)
  mime_type: video/mp4
  static_files: static/\1
  upload: static/(.*\.mp4)

- url: /(.*\.(ogg|oga))
  mime_type: audio/ogg
  static_files: static/\1
  upload: static/(.*\.(ogg|oga))

- url: /(.*\.ogv)
  mime_type: video/ogg
  static_files: static/\1
  upload: static/(.*\.ogv)

- url: /(.*\.otf)
  mime_type: font/opentype
  static_files: static/\1
  upload: static/(.*\.otf)

- url: /(.*\.rss)
  mime_type: application/rss+xml
  static_files: static/\1
  upload: static/(.*\.rss)

- url: /(.*\.safariextz)
  mime_type: application/octet-stream
  static_files: static/\1
  upload: static/(.*\.safariextz)

- url: /(.*\.(svg|svgz))
  mime_type: images/svg+xml
  static_files: static/\1
  upload: static/(.*\.(svg|svgz))

- url: /(.*\.swf)
  mime_type: application/x-shockwave-flash
  static_files: static/\1
  upload: static/(.*\.swf)

- url: /(.*\.ttf)
  mime_type: font/truetype
  static_files: static/\1
  upload: static/(.*\.ttf)

- url: /(.*\.txt)
  mime_type: text/plain
  static_files: static/\1
  upload: static/(.*\.txt)

- url: /(.*\.unity3d)
  mime_type: application/vnd.unity
  static_files: static/\1
  upload: static/(.*\.unity3d)

- url: /(.*\.webm)
  mime_type: video/webm
  static_files: static/\1
  upload: static/(.*\.webm)

- url: /(.*\.webp)
  mime_type: image/webp
  static_files: static/\1
  upload: static/(.*\.webp)

- url: /(.*\.woff)
  mime_type: application/x-font-woff
  static_files: static/\1
  upload: static/(.*\.woff)

- url: /(.*\.xml)
  mime_type: application/xml
  static_files: static/\1
  upload: static/(.*\.xml)

- url: /(.*\.xpi)
  mime_type: application/x-xpinstall
  static_files: static/\1
  upload: static/(.*\.xpi)

# image files
- url: /(.*\.(bmp|gif|ico|jpeg|jpg|png))
  static_files: static/\1
  upload: static/(.*\.(bmp|gif|ico|jpeg|jpg|png))

# audio files
- url: /(.*\.(mid|midi|mp3|wav))
  static_files: static/\1
  upload: static/(.*\.(mid|midi|mp3|wav))  

# windows files
- url: /(.*\.(doc|exe|ppt|rtf|xls))
  static_files: static/\1
  upload: static/(.*\.(doc|exe|ppt|rtf|xls))

# compressed files
- url: /(.*\.(bz2|gz|rar|tar|tgz|zip))
  static_files: static/\1
  upload: static/(.*\.(bz2|gz|rar|tar|tgz|zip))

# index files
- url: /(.*)
  static_files: static/index.html
  upload: static/index.html

# site root
- url: /
  static_files: static/index.html
  upload: static/index.html

这是我的文件夹结构:

.root
  - app.yaml
  - static
    - index.html
    - favicon.ico
    - styles.html
    - php
      - sendMail.php
    - css
      - ...
    - js
      - ...
    - fonts
      - ...
    - image
      - ...

此版本修复了第二个更新问题! 但是,

对于其他情况,例如:

https://koki-6hats.appspot.com/index/

https://koki-6hats.appspot.com/index/index.html

仍然无法使用。


例如,我想要的最终输出是:

文件夹结构:

.root
  - app.yaml
  - static
    - index.html
    - favicon.ico
    - styles.html
    - php
      - sendMail.php
    - css
      - ...
    - js
      - ...
    - fonts
      - ...
    - image
      - ...
    - folderA
      - index.html
      - css, js, etc...
    - folderB
      - index.html
      - css, js, etc...

网址关系:

  1. URL:http://domain/folderA/(anything_and_level_behind),输出:显示folderA的index.html
  2. URL:http://domain/folderB/(anything_and_level_behind),输出:显示folderB的index.html
  3. URL:http://domain/other_folder_have_no_index_html_inside/,输出:显示静态的index.html
  4. URL:http://domain/anything(no_/_AtLast),输出:显示静态的index.html
  5. URL:http://domain/anything/anything/anything/(and_so_on...),其中“任何内容”都不是“ folderA” /“ folderB”,输出:显示静态的index.html
  6. 在上述情况不匹配时显示static的index.html

最新更新

感谢Alex和GAEfans再次提供帮助。

现在重定向是完美的。但是它会在已部署版本的控制台中显示一些警告。 Warnings

2 个答案:

答案 0 :(得分:2)

URL处理程序将如何超过第17行? (.*)表示“零个或多个字符”。这意味着输入的所有内容都会转到index.html

注释掉的行更接近您想要的内容:

- url: /   # first test for root url
  static_files: 6Hats/index.html
  upload: 6Hats/index.html

- url: /(.*)   #everything else ends up here
  static_files: 6Hats/\1
  upload: 6Hats/(.*)

更新

我会将所有静态文件目录都放在static文件夹中。然后使用:

- url: /static
  static_dir: 6Hats/static

- url: /favicon.ico
  static_files: 6Hats/favicon.ico
  upload: 6Hats/favicon.ico

- url: /.*   #everything else after slash ends up here
  static_files: 6Hats/index.html
  upload: 6Hats/index.html

将静态文件的网址更改为/static/js/filename.js/static/css/filename.css等格式。

如果您以指向index.html的包罗万象的开头,这意味着您对静态文件(图像,js,css)的所有调用也将调用index.html。当然,那是一团糟。

更新2:

如果您使用:

- url: .*   #everything else ends up here
  static_files: 6Hats/index.html
  upload: 6Hats/index.html

(不带斜线),其他所有内容都应该在那里捕获。

答案 1 :(得分:1)

问题在于,应用程序引擎现在针对每个请求返回index.html

例如,如果您去这里:https://kokitang.com/6Hats/main.css,您会看到它仍然返回index.html

这是您的app.yaml中的第17行

修改

好吧,我想我知道您现在要做什么。

使每个链接都路由到index.html的主要问题是还需要加载其他文件,例如main.cssmain.js等。

所以您只需要为他们设置一条特殊规则

handlers:

# images, css, js, etc
- url: /(.*\.(css|js|gif|png|jpg|jpeg))
  static_files: 6Hats/\1

# all other links load index.html
- url:/(.*)$
  static_files: 6Hats/index.html

第二次编辑

您需要将资源链接更改为绝对链接,而不是相对链接

enter image description here

<link rel="stylesheet" href="css/base.css">

需要成为

<link rel="stylesheet" href="/css/base.css">