app.yaml 配置不生效
1、app.yaml 放在根路径下, 不是放在 webroot 下
2、配置书写严格按照 YAML标准 , 比如 wordpress 应用: (复制代码后注意格式对齐, 否则会启动失败)
tryuri:
- path: / # "-" 前面请用空格, 不要用 "Tab" 键(制表符), "-" 后面有一个空格, 切记不可省略 ,下同
script: /index.php # 与 "path" 对齐
3、修改 app.yaml 后若要生效, 请在 "应用列表" 的相应应用中选择"重启"
4、文件格式: app.yaml 一定要设置为 utf-8 , 其它格式不生效, 注意 包括 utf-8 + BOM 的格式亦不支持, 附在线检测:
http://yaml-online-parser.appspot.com/
上传的文件图片无法访问
TAE 上传或生成的文件/图片要同步的 storage 上才会永久有效, 请在 "扩展服务" 的 storage 服务中任意创建一个用于存储, 并在 app.yaml 中配置你要同步的路径, 比如: (复制代码后注意格式对齐, 否则会启动失败)
# 注意, 如果你确实没有上传/生成文件等应用, 就不要在 app.yaml 中配置, 这会有一定的性能开销 ossprefix: - /ace/app/webroot # 表示 webroot 下的上传或生成的文件都会同步到 storage 上
如何写 rewrite/转发/伪静态规则
1、TAE 使用的是 Nginx 配置语法, 假设一个规则为:
rewrite ^(.+)$ /index.php?q=$1 last;
那么转化为 TAE 的配置则为: (复制代码后注意格式对齐, 否则会启动失败)
rewrite: - url: ^(.+)$[/size] script: /index.php?q=$1 last # 注意没有 ";"
2、 排除一些路径和文件类型的写法 (复制代码后注意格式对齐, 否则会启动失败)
感谢 picer 网友提供 # 非index.php开头的网址,排除三种情况后转到index.php # 1.index.php 开头的网址 # 2.css/,img/,js/,lib/,sjxq/ 目录开始的网址 # 3.xxxx.php 形式的网址,以支持根目录下的php文件访问 # 3.xxx.html 形式的网址,以支持根目录下的html文件访问 rewrite: - url: ^(\/(?!(index\.php|(?:css|js|img|lib|flash|help|html|font)\/|[^\/]*?\..*)).*)$ script: /index.php?/$1
3、常用的 apache 的转发规则,如:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA]
改写为 TAE 时可以直接用 tryuri:
tryuri: - path: / script: /index.php
4、外部跳转 (复制代码后注意格式对齐, 否则会启动失败)
rewrite: - url: ^/1.gif$ script: http://xxx.com perment
5、 ThinkPHP 常用规则, 实现 /index.php/aa/bb 优化成 /aa/bb , 记得要重启(不仅是重新发布)应用 (复制代码后注意格式对齐以及去掉多余空格, 否则会启动失败)
rewrite: - url: ^(/(?!(\.)).*)$ script: /index.php/$1 last
这个规则完全和 nginx 一致
如何关闭 Transfer-Encoding,微信开发等场景
<?php //$a = '123'; $a = $_GET["echostr"]; header('Content-Type: application/octet-stream'); // 不要用默认的 text/html, 如果你不知道你输出的类型请用 application/octet-stream header('Content-Length: '. strlen($a)); echo $a;
在定时任务里执行 URL, 但是又怕被其它用户访问到怎么办?
比如 定时请求的 url 是 http://xx.aliapp.com/a.php
那么可以在 a.php 里写这么一行:
if ($_GET['token'] != '123456') exit; # 这里密码当然可能不是 123456,
那你定时触发的 URL 写成 http://xx.aliapp.com/a.php?token=123456
这样就安全了, 很简单的两行代码, 就能防止被外部用户访问到.
如何设置防盗链
对于非当前域名 xxx.aliapp.com 的 referer 进行拒绝
antihotlinking: - except: ['/xxxxx/111.gif', '/xxxx/xxx/222.js'] # 例外的 url, 防盗链不生效的路径文件/目录
Fatal error: Out of memory / Allowed memory size of
这个要配置 memory_limit, TAE 默认 32(M), 需要自己根据情况(不是越大越好, 设置越小, 你网站的负载能力越强)调整:
memory_limit: 48
写入 storage 的文件可以直接通过 TAE 的域名来访问
$Storage = Alibaba::Storage(); // 想通过域名访问, 只能写在默认的 storage 里面 $Storage->saveText('xxxx.jaeapp.com/1/webroot/123.jpg', '123', -11); // xxxx 是你的域名前缀, 不要加 http, 1是版本号, 可查看版本管理里面的版本号
写入后, 浏览器就能直接访问了, xxxx 是你的域名前缀, 不要加 http, 1是版本号, 可查看版本管理里面的版本号, 在配置外部 oss 也可以遵循这个路径使得可以直接访问到静态资源.
TAE上使用文件缓存
千万不要在 TAE 上使用文件缓存这类功能或插件, TAE 是个真正的分布式系统, 程序运行在未知数量的主机上, 在本地用文件缓存完全不能提升性能, 反而会降低性能, 典型的例子如: smarty 等, 建议关闭缓存.
对于真正需要缓存的功能, 建议使用TAE 的 cache服务开发.
SVN删除文件,重新发布后删除的文件还在
1) 文件会被动态修改过, 修改过的文件 svn 暂时不负责删除
2) 此文件被动态同步中, 详情见, 本地读写同步 oss
解决办法, 动态 unlink('文件')
无法 include 某个文件,或某个文件无法读取
TAE 是 linux 环境,对于文件大小写敏感,请注意文件名是否有大小写情况,请和程序中的大小字字母保持一致。