我正在为php试用GAE,并在app.yaml文件结构中迷失了方向。我可以从google教程中了解这个部分,它展示了如何将所有url请求指向单个文件。
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因此,我的xxx.appspot.com或xxx.appSports.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');因此,它加载一个会话并获取用户名和电子邮件,执行一些字符串格式化,然后设置为会话变量,然后我检查是否匹配一个条件,并根据条件重定向到另一个脚本,该脚本进行一些更多的验证,等等。简单来说,我只是把它重定向到login.php
login.php
<?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中的演示示例一起使用它,那就太好了。
发布于 2013-07-14 01:12:24
您的app.yaml看起来不错,只是不完整。
您已经定义了/和/main映射到您的main.php脚本,这很好。
但是当用户的浏览器请求/login.php时,App在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参考页面:https://developers.google.com/appengine/docs/php/config/appconfig上了解这些通配符和其他app.yaml选项。
(不过,样式表、javascript和图像不需要通配符,因为您已经使用了static_dir。)
发布于 2013-07-17 00:27:29
这是我的,也许会有帮助。Pcode只是我的一个文件夹(不确定是否需要定义文件夹,但我还是把它留在了那里):
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主机类似,如hostgator、godaddy等:
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.phphttps://stackoverflow.com/questions/17620667
复制相似问题