php - 美化 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
解决方案
如果您确定所有静态文件都已在 中处理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();
})
?>
更新:
要处理404
s,您需要一个要捕获的有效 URL 列表(就像在 .htaccess 中一样)。您可以在app.yaml
. 然后,要处理404
s,您需要使用一个包罗万象的处理程序:
- url: /(home|about|contact|page1|page99|etc)$ ## the pipe (|) means "or"
script: \1.php
- url: /.*
script: 404.php
然后编写一个简单的 404.php 脚本页面来显示正确的消息并传递一个404
http 响应。
推荐阅读
- java - 将 Jbutton 与 ArrayList 的对象值相关联。摇摆
- laravel - Laravel 5如何检查密码重置令牌是否存在于密码重置中
- reactjs - 具有静态成员组件的 React 类的正确类型定义
- javascript - Babel 7 是否符合 ES 模块规范?
- c++ - C++:简单的四阶龙格-库塔计算器
- java - 如何使用 Apache POI 将 altChunk 元素添加到 XWPFDocument
- java - 将密码验证变成一个类
- python - python - 从子调用父方法时保留在基类中
- javascript - 角度默认下拉值 2 方式绑定
- php - proc_open(): fork failed - 内存不足