首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构造app.yaml文件?

如何构造app.yaml文件?
EN

Stack Overflow用户
提问于 2013-07-12 17:29:11
回答 2查看 20.4K关注 0票数 6

我正在为php试用GAE,并在app.yaml文件结构中迷失了方向。我可以从google教程中了解这个部分,它展示了如何将所有url请求指向单个文件。

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

但对我的情况没什么帮助。我将张贴我的设置和文件结构在图片中。

App.yaml

代码语言:javascript
复制
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

因此,我的xxx.appspot.com或xxx.appSports.com/main的登陆页面将是main.php。而且效果很好。

main.php

代码语言:javascript
复制
<?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');

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

login.php

代码语言:javascript
复制
<?php
session_start();
echo $_SESSION['name'];

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

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

例如:来自login.php

如果userA属于Dept1 标题(‘Location: /Dept1/main.php'); 否则 标题(‘Location: /Deptx/main.php');

因此,我期望有很多重定向,而且每个重定向都必须能够传递设置的会话变量。在正常的PHP服务器上运行时,我能够做到这一点。GAE版本需要重新学习。我要事先感谢任何人花时间阅读,直到听到。谢谢。

另外,如果有人能够详细介绍如何使用app.yaml,以及如何与w3school中的演示示例一起使用它,那就太好了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-14 01:12:24

您的app.yaml看起来不错,只是不完整。

您已经定义了//main映射到您的main.php脚本,这很好。

但是当用户的浏览器请求/login.php时,App在app.yaml中查找并没有找到任何匹配的路由,因此您将得到这个404错误。

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

然后我会检查你的申请,并确保你没有错过任何其他路线。

您还可能需要在app.yaml中的URL中使用通配符。否则,如果您的应用程序将用户发送到像/main/subpage这样的URL,它将不会转到main.php处理程序,因为它不匹配app.yaml中的任何路由。在本例中,您可能希望使用url: /main.\*作为示例。或者,您可以在/.*的末尾使用跟踪所有的app.yaml处理程序。

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

(不过,样式表、javascript和图像不需要通配符,因为您已经使用了static_dir。)

票数 11
EN

Stack Overflow用户

发布于 2013-07-17 00:27:29

这是我的,也许会有帮助。Pcode只是我的一个文件夹(不确定是否需要定义文件夹,但我还是把它留在了那里):

代码语言:javascript
复制
application: theclearview1
version: 10
runtime: php
api_version: 1

handlers:
- url: /(.*\.(htm$|html$|css$|js$))
  static_files: \1
  upload: (.*\.(htm$|html$|css$|js$))
  application_readable: true

- url: /css
  static_dir: css

- url: /js
  static_dir: js

- url: /(.*\.(ico$|jpg$|png$|gif$))
  static_files: \1
  upload: (.*\.(ico$|jpg$|png$|gif$))
  application_readable: true

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

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

- url: /.*
  script: index.php

基本上,我认为下面的代码行将与常规的php主机类似,如hostgatorgodaddy等:

代码语言:javascript
复制
handlers:
- url: /(.*\.(htm$|html$|css$|js$))
  static_files: \1

  upload: (.*\.(htm$|html$|css$|js$))
  application_readable: true

- url: /(.*\.(ico$|jpg$|png$|gif$))
  static_files: \1

  upload: (.*\.(ico$|jpg$|png$|gif$))
  application_readable: true

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

- url: /.*
  script: index.php
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17620667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档