首页 > 解决方案 > 美化 Google App Engine PHP 静态网站上的 URL

问题描述

我正在为我的朋友开发一个带有一些轻量级 PHP 代码的静态网站。每个页面的 url 上都有一个 .php,例如 xxxxx.com/service.php。我做了一些研究,发现调整app.yaml不是一种优雅的方法,因为它不会优雅地处理错误 404。我的想法是,我可以创建一个特殊的 PHP 文件,接收以 .php 结尾的请求,app.yaml并处理每个请求,例如.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

标签: phpgoogle-app-engine

解决方案


如果您确定所有静态文件都已在 中处理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

重定向.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,您需要使用一个包罗万象的处理程序:

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


- url: /.*
  script: 404.php

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


推荐阅读