如何构建app.yaml文件?

Abi*_*ran 6 php google-app-engine redirect app.yaml

我正在尝试GAE for php并迷失在app.yaml文件构造中.我可以理解谷歌教程中的部分,该部分显示了如何将所有网址请求指向单个文件

https://developers.google.com/appengine/docs/php/gettingstarted/helloworld

但它对我的情况没有帮助.我将发布我已设置的内容,文件结构在图片中.在此输入图像描述

的app.yaml

application: xxx
version: 1
runtime: php
api_version: 1
threadsafe: true

handlers:
- url: /stylesheets
  static_dir: stylesheets

- url: /images
  static_dir: images

- url: /scripts
  static_dir: scripts

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

- url: /
  script: main.php
  login: required
  auth_fail_action: redirect

- url: /main
  script: main.php
  login: required
  auth_fail_action: redirect
Run Code Online (Sandbox Code Playgroud)

所以我的xxx.appspot.com或xxx.appsport.com/main的目标网页是main.php.它工作正常.

main.php

<?php
session_start();
date_default_timezone_set('America/Los_Angeles');
require_once 'google/appengine/api/users/UserService.php';

use google\appengine\api\users\User;
use google\appengine\api\users\UserService;

$user = UserService::getCurrentUser();
$name= $user->getNickname();
$name = explode(".",$name);
$name[0]= ucfirst($name[0]);
$name[1]= ucfirst($name[1]);
$name = $name[0]." ".$name[1];
$_SESSION['name']=$name;
$_SESSION['email']= getenv('USER_EMAIL');

header('Location: login.php');
Run Code Online (Sandbox Code Playgroud)

所以它加载启动一个会话并获取用户名和电子邮件做一些字符串格式,然后设置为Session变量,然后我检查匹配条件,并根据条件重定向到另一个脚本,进行更多的验证等等.简单来说,我只是将它重定向到login.php

的login.php

<?php
session_start();
echo $_SESSION['name'];
Run Code Online (Sandbox Code Playgroud)

因此显示的输出应该是会话变量名称,而是我得到它

在此输入图像描述

那我做错了什么?我将使用登录页面从SQL数据库中提取用户数据,并根据该值将用户重定向到不同的页面,这些页面将根据其设置显示不同的表单,表格和报表.

例如.来自login.php

如果userA属于Dept1

header('Location:/Dept1/main.php');

其他

header('Location:/Deptx/main.php');

所以我希望有很多重定向,每个重定向必须能够继承所设置的会话变量.我能够在普通的PHP服务器上运行时这样做.GAE版本需要一些重新学习.我想提前感谢任何一个人只是花时间阅读,直到听到.谢谢.

如果有人可以做一个关于如何使用app.yaml的详细教程以及它如何与w3school中的演示示例一起使用,那将是很好的.

Jam*_*sik 9

你的app.yaml看起来不错; 它只是不完整.

你已经为你的main.php脚本定义了"/"和"/ main"映射,并且工作正常.

但是当用户的浏览器请求"/login.php"时,App Engine会在app.yaml中查找并且找不到任何匹配的路由,因此您会收到404错误.

要处理这种特殊情况,您可以使用"url:/login.php"和"script:login.php"进行另一个条目.

然后我会查看你的申请,并确保你没有遗漏任何其他路线.

您还可能需要在app.yaml中的URL中使用通配符.否则,如果您的应用程序曾将用户发送到"/ main/subpage"之类的URL,则它不会转到main.php处理程序,因为它不匹配app.yaml中的路由.在这种情况下,您可能希望使用"url:/main.*"作为示例.或者你可以在app.yaml的末尾使用一个"/.*"处理程序.

您可以在PHP app.yaml参考页面上了解这些通配符和其他app.yaml选项:https: //developers.google.com/appengine/docs/php/config/appconfig

(但是,您不需要为样式表,javascript和图像添加通配符,因为您已经使用了static_dir.)