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

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

我正在为我的朋友开发一个静态网站,其中包含一些简单的PHP代码。每个页面上的URL都有一个.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
php google-app-engine
1个回答
1
投票

如果您确定所有静态文件都已在app.yaml中处理,并且处理了root(/),则意味着剩下的任何内容都将转到脚本中。所以,你的最终处理程序可能是:

- 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();
    })

?>

更新:要处理404s,您需要一个有效URL列表(就像在.htaccess中一样)。您可以在app.yaml中使用正则表达式执行此操作。然后,为了处理404s,你完成了一个catchall处理程序:

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


- url: /.*
  script: 404.php

然后你编写一个简单的404.php脚本页面来显示正确的消息并发送一个404 http响应。

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