在Google App Engine PHP静态网站上美化URL

时间:2018-09-06 13:07:46

标签: php google-app-engine

我正在用一些轻巧的PHP代码为我的朋友开发一个静态网站。每个页面的网址上都有一个.php,例如xxxxx.com/service.php。我进行了一些研究,发现对app.yaml进行调整不是一种延迟方法,因为它无法优雅地处理错误404。我的想法是,我可以创建一个特殊的PHP文件,接收来自app.yaml的以.php结尾的请求,并像.htaccess这样处理每个请求。由于缺乏PHP知识,因此无法在文件中生成代码。请给我启发。

下面是我的app.yaml

runtime: php55
api_version: 1
instance_class: F1
automatic_scaling:
  max_idle_instances: 1
  min_pending_latency: 30ms
  max_instances: 1

handlers:
- url: /css
  static_dir: css
  secure: always

- url: /js
  static_dir: js
  secure: always

- url: /images
  static_dir: images
  secure: always

- url: /fonts
  static_dir: fonts
  secure: always

- url: /sitemap\.xml
  static_files: sitemap.xml
  upload: sitemap.xml
  secure: always

- url: /
  script: index.php
  secure: always

- url: /(.+\.php)$
  script: \1
  secure: always

- url: /.*
  script: 404.php
  secure: always

1 个答案:

答案 0 :(得分:1)

如果您确定所有静态文件都已在app.yaml中处理,并且根(/)已处理,则意味着剩下的所有内容都将写入脚本。因此,您的最终处理程序可能是:

- url: /(.+)
  script: \1.php

我会离开

- url: /(.+\.php)$
  script: \1

上方的处理程序,作为倒数第二个处理程序,因此一个人可以去/about/about.php,它将同时处理这两种情况。

- url: /(.+)\.php$
  script: \1.php

也许将.php版本重定向到美化版本,所以用户会随着时间的推移而适应,而不会获得404

- url: /(.+)\.php$
  script: redirect.php

redirect.php:

<?php

    require_once __DIR__ . '/../vendor/autoload.php';

    $app = new Silex\Application();

    $app->get('/{scriptName}.php', function($scriptName) {
        header('Location: https://www.example.com/NewAbout/{$scriptName}');
        exit();
    })

?>

更新: 要处理404,需要一个有效URL列表(就像在.htaccess中一样)。您可以使用app.yaml中的正则表达式来做到这一点。然后,要处理404,需要完成一个处理程序:

- url: /(home|about|contact|page1|page99|etc)$ ## the pipe (|) means "or"
  script: \1.php


- url: /.*
  script: 404.php

然后,您编写一个简单的404.php脚本页面以显示正确的消息并传递404 http响应。