新浪SAE URLRewrite(伪静态、重定向)详解
SAE全称Sina App Engine,真是一个好东西,他有很多优秀的特性,简单来说SAE就是一个简单高效的分布式Web服务开发、运行平台。支持现在常用的 PHP+Mysql 环境,在开发中难免会碰到项目需要做 URL Rewrite(伪静态、跳转等),然而SAE不支持 Apache 下的 .htaccess,不过不要难过,SAE提供了自己的 Rewrite 方式,本文我们就对SAE的 Rewrite 做个介绍,希望需要的同学能快速根据自己需求写想要的规则。
config.yaml 简介
SAE的配置文件在每个应用的根目录里面,名字是config.yaml。这个文件就类似于 Apache 的 .htaccess,所有的伪静态规则,404设置等都在这里配置。
config.yaml内容格式
name: phpclubs
version: 1
handle:
- directoryindex: index.php index.html index.htm
- errordoc: 404 /path/404.html
- rewrite: if(!is_dir( ) && path ~ "urldir/(.*)") goto "/tools/$1"
上面是一个应用里面的 config.yaml 文件
第一行 表示 当前应用的名字
第二行 表示 当前应用的代码的版本
第三行 handle 下面的就是我要写的规则
config.yaml修改途径
我们创建项目版本时系统会自动生成config.yaml文件在根目录(如果没有自己可以手动创建一个),第一种 我们可以通过 在线编辑器(SAE CLOUD EDITOR) 进行编辑config.yaml文件;第二种 我们还可以使用svn本地编辑,提交到服务器,修改都是实时生效的。建议使用第二种方法,不容易出错,方便快捷。
语法说明
AppConfig 的语法分两种,一种是简单的参数罗列方式,一种是灵活的表达式语法,不同的功能会用到不同的类型的语法。
1、表达式语法
其形式为:
if (表达式) 执行规则
表达式 有如下形式:
1) in_header["header_name"] op string_or_digit
2) out_header["header_name"] op string_or_digit
3) path op string
4) query_string op string
5) is_file()
6) is_dir()
关于以上形式说明如下:
in_header 是请求头,out_header 是响应头,header_name 是 header 的名字,这个我们一般用到的不多;
op 是操作符,有 ~(正则匹配) !~(正则不匹配) ==(相等,用于字符串和数字) !=(不相等,用于字符串和数字) >, >=, <, <=(比较操作符仅用于整形数字),其中~正则匹配,用的比较多;
string 是形如 “xxxx” 的字符串;
string_or_digit 表示 string 或者 digit,根据 op 的种类,后面跟 string 或者 digit;
path 是系统宏,表示用户请求的 url 去掉主机部分和查询串后剩下的部分,用到的很多,例如:http://www.xxx.com/list/test.php?id=23 path就是 /list/test.php
query_string 是系统宏,表示查询串,一般是url中问号后面的内容 例如上面 的url 中的 id=23
is_file() 和 is_dir 是系统函数,判断 path 是文件还是目录,!is_file(),!is_dir() 分别是其否定形式(使用也比较多)。
2、URL重写
- rewrite: if (表达式) goto target_url
在 Rewrite 中,表达式可以用 && 连接,组成复合表达式。 path 只能出现一个(如果有多个,只有最后一个生效,其它被忽略),当省略 path 时,表示任意请求。
target_url 表示重定向的目标url,在 target_url 可以以 $N 的形式表示 path 中匹配到的内容,%N 的形式表示最后一个query_string 中匹配到的内容,因为 query_string 可以在 if 中出现多次,以%{QUERY_STRING} 表示查询串。例如:
- rewrite: if(query_string ~ "^(so)$" && path ~ "zhaochou$") goto "/url/%1"
- rewrite: if(is_dir( ) && path ~ "urldir/(.*)") goto "/url/$1"
- rewrite: if(!is_file() && !is_dir()) goto "index.php?%{QUERY_STRING}"
比如我们要先下面的伪静态:
实例1
真实处理地址为:www.xxx.com/index.php?a=list&b=new&id=23
要伪静态成这样:www.xxx.com/list-new-23.html
规则:
- rewrite: if(path ~ "list-new-(\d+)\.html") goto "index.php?a=list&b=new&id=$1"
实例2
真实处理地址为:www.xxx.com/index.php?a=list&b=new&id=23
要伪静态成这样:www.xxx.com/list-new.php?id=23
规则:
-rewrite: if(path ~ "list-new\.php" && query_string ~ "id=(\d+)") goto "index.php?a=list&b=new&id=%1"
3、自定义目录默认页面
当访问 URL 没有指定文件的路径时,返回aaa.php,如果其不存在,则返回bbb.html
– directoryindex: aaa.php bbb.html
4、自定义错误页面(404页面等)
遇到 404 错误,返回 /path/404.html 文件
遇到 403 错误,返回 /path/403.html 文件
– errordoc: 404 /path/404.html
– errordoc: 403 /path/403.html
5、对文件目录进行简单的访问权限认证
访问 secret 目录需要密码,允许用户 test 用密码 123qwe 访问,用户 coder 用密码 123asd 访问:
– passwdaccess: if(path ~ "/secret/") passwd "test:123qwe coder:123asd"
访问 .text 结尾的文件需要密码,允许用户 writer 用密码123zxc:
– passwdaccess: if(path ~ :\.text$:) passwd "writer:123zxc"
所有访问都要密码,允许用户 writer 用密码 123zxc 访问:
– passwdaccess: passwd "write:123zxc"
用户的网站后台程序都放在 admin 目录下,需要对admin目录做密码保护:
– passwdaccess: if(path ~ "/admin/") passwd "admin:admin123"
尾语
相信你试完上面的东西,应该可以自己写想要的规则了,祝你好运!
新浪SAE URLRewrite(伪静态、重定向)详解的更多相关文章
- 新浪sae url rewrite(伪静态、重定向)详解
新浪sae url rewrite(伪静态.重定向)详解 http://www.veryhuo.com phpclubs 2011-11-14 投递稿件 sae全程Sina App Engine,真是 ...
- 新浪SAE创建微信模板消息应用与SVN的使用
本地项目源文件必须放在应用名目录下面的数字目录里面.如:D:\SVN\xtmp1\1 我们在前面讲述在新浪SAE中如何建站,今天我们来详解如何上传文件.新浪SAE中是不允许用FTP来上传的.我们只能用 ...
- [SVN Mac自带SVN结合新浪SAE进行代码管理]
前一篇我转载了别人SVN的使用方法,前面的配置和服务器我不是很明白,自己尝试后发现我需要使用到的核心命令是下面一些. 新浪SAE提供了SVN代码管理仓库,只要进入相应应用,然后点击左侧代码管理,到最下 ...
- 【微信开发】 新浪SAE开发平台 注意事项
1. 微信开发 新浪SAE开发平台 验证Token 一直失败? 这个问题困扰了一个又一个的微信学习者,现在百度到的答案有:在echo $echoStr;之前添加header('content-type ...
- 【网站开发】在新浪SAE上搭建一个博客
概述 在新浪SAE上搭建一个博客 1.访问新浪SAE站点 http://sae.sina.com.cn/ 2.注册新浪SAE 3.选择应用仓库 4.选择WordPress 5.安装WordPress ...
- 从Python爬虫到SAE云和微信公众号:二、新浪SAE上搭建微信服务
目的:用PHP在SAE上搭建一个微信公众号的服务器. 1.申请一个SAE云账号 SAE申请地址:http://sae.sina.com.cn/ 可以使用微博账号登陆,SAE是新浪的云服务,时间也比较 ...
- 【解决】 新浪sae固定链接404 问题
固定链接404 固定链接是一个很重要的内容,wordpress默认的链接很复杂,也不利于搜索引擎搜索.wordpress也提供修改固定链接的功能,在设置里面[固定链接]修改. 但是,使用新浪sae的小 ...
- 新浪SAE中文分词接口
最近发现新浪SAE平台上竟然也提供分词功能,分词效果也还不错,由新浪爱问提供的分词服务,研究了一番,做了一个简易版的在线调用接口(get方式,非post) 官网说明:http://apidoc.sin ...
- 部署新浪SAE web.py Session及图片上传等问题注意事项
1.以下几条代码解决编码问题 import sysreload(sys)sys.setdefaultencoding('utf-8') 2.图片上传问题 需要开通sina的Storage服务,随便建个 ...
随机推荐
- 光流算法:Brox算法
参考论文:1. High Accuracy Optical Flow Estimation Based on a Theory for Warping, Thomas Box, ECCV20042. ...
- [HDU 4787] GRE Words Revenge (AC自动机)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4787 题目大意: 给你若干个单词,查询一篇文章里出现的单词数.. 就是被我水过去的...暴力重建AC自 ...
- [HDU 4082] Hou Yi's secret (简单计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4082 题目大意: 给你n个点,问能最多构成多少个相似三角形. 用余弦定理,计算三个角度,然后暴力数有多 ...
- mysql information_schema
SELECT TABLE_NAME,COLUMN_NAME,CHARACTER_MAXIMUM_LENGTH,COLUMN_COMMENT FROM COLUMNS WHERE TABLE_SCHEM ...
- [转]iOS技巧之获取本机通讯录中的内容,解析通讯录源代码
一.在工程中添加AddressBook.framework和AddressBookUI.framework 二.获取通讯录 1.在infterface中定义数组并在init方法中初始化 ? 1 2 3 ...
- XML小总结
XHTML 标签都有固定含义,不能去创造新的标签. 而 XML 支持自定义标签,具有扩 展性. 定义 XML 文档结构有两种方法:DTD 和 XSD. XSD 本身就是 XML 文档结构,是继 DTD ...
- 剑指Offer:面试题6——重建二叉树(java实现)
问题描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不包含重复的数字. 例如: 输入:前序{1,2,4,7,3,5,6,8},中序{4,7,2,1 ...
- js对象4-js原型--杂志
提问:在js中什么是原型 prototype 每个学js的人都有自己的解释,网上一大堆的解释与应用,但是看了他们的解释表示还是不理解怎么办?(原因是他们说的太天花乱坠了) 官方手册解释:prototy ...
- Unity3d - RPG项目学习笔记(一)
通过NGUI和工程素材,学习泰课项目——黑暗之光. 现阶段心得整理: 一.开始界面 开始界面显示顺序为:①白幕渐隐:②镜头拉近:③标题渐显:④按键响应. 1.1 白幕渐隐 NGUI是一个非常强大的插件 ...
- 非常不错的IT进阶站点
1:CSDN http://www.csdn.net/ 2:Iteye http://www.iteye.com 3:拼吾爱 http://pin5i.com 4:月光博客 http://www.wi ...