新浪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"

尾语

相信你试完上面的东西,应该可以自己写想要的规则了,祝你好运!

时间: 2025-01-31 22:59:16

新浪SAE URLRewrite(伪静态、重定向)详解的相关文章

新浪SAE下 riwrite重写规则详解

AppConfig模块上线,Rewrite和压缩页面功能可以用了 03/19. 2010 AppConfig能做哪些事情? AppConfig模块负责提供用户自定义web服务器配置的能力,目前可以自行配置的功能包括 目录默认页面 自定义错误页面 压缩 页面重定向 页面过期 设置响应Header的Content-Type 在哪里设置AppConfig选项? 在每个版本的目录下边,有一个叫做config.yaml的文件,只需要在里边追加handel段(绿色部分)即可,AppConfig采用基于yam

新浪sae url rewrite(伪静态、重定向)详解

新浪sae url rewrite(伪静态.重定向)详解 http://www.veryhuo.com phpclubs 2011-11-14 投递稿件 sae全程Sina App Engine,真是一个好东西,他有很多优秀的特性,简单来说SAE就是一个简单高效的分布式Web服务开发.运行平台. 支持现在常用的 php+mysql环境,在开发中难免会碰到项目需要做url rewrite(伪静态),然而sae不支持 apache 下的.htaccess .不过不要难过,sae提供了自己的rewri

在新浪SAE上部署PHP项目记录

新浪SAE: http://sae.sina.com.cn 部署步骤: 1.需先注册用户.2.进入用户管理后台--添加应用--填入相关的域名,项目名称,项目描述等. 3.在本地电脑上,命名好与sae上所填的项目名称一致,数据库名称也一致,然后在项目文件的config.php: 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => 'localhost', // 服务器地址 'DB_NAME' => 'test0527', // 数据库名,需与项目名称一致

【玩转微信公众平台之六】 搭建新浪SAE服务器

赶紧接上一篇继续讲. ------本篇将介绍如何搭建 新浪SAE服务器.猛戳 http://sae.sina.com.cn/1.先自己注册一个账号,如果有新浪的账号,微博之类的都可以直接拿来用,授权一下就可以,如下: 2.接下来会让你填写一些安全设置,自己根据要求如实填写就可以了.要注意的是,你设置的安全密码别忘了,原因如下: 看的懂就好,看不懂也罢,我们继续往下走.3.注册的最后一步是 手机绑定 ,将你手机收到的验证码输入进去即可.这些都没啥难度,我就不多说了.注册成功后,点击 我的首页 回到

微信开发01-申请新浪SAE

为什么开发微信要选择新浪SAE呢,其实新浪SAE有很多的局限性,完全没有自己配置服务器环境来的灵活.那为什么还要用,因为便宜,是的很便宜,虽然现在创建应用不在免费了,每天收取10个豆,1元钱是100豆,也就是说一个月只花3块钱. 但是使用memcache缓存好像是要收费的.使用mysql共享版是免费的. 使用SAE做开发首先需要到SAE上创建一个应用.没有sae的童鞋请戳这里.开通新浪SAE 使用微博登录SAE之会进入到个人主界面.未完成实名认证的请完成实名认证.不然创建的应用在访问时会加上SA

微信公众号二次开发(二)-注册新浪SAE

新浪SAE:Sina App Engine是新浪提供的云服务,对个人提供免费的Web应用/业务开发托管.运行平台.我们就用它来作为我们的开发服务器测试环境. 注册新浪云http://sinacloud.com/ 创建SAE应用,使用PHP作为开发语言 填写运营者身份信息 进入后台 在后台查看总揽 该服务器我们就将利用它作为我们的二次开发服务器进行配置. 欢迎微信扫一扫或搜索关注我的"Windows自动化运维"公众号,我会每天定期发布Windows自动化运维的相关知识供大家讨论研究. 本

新浪sae上安装原生wordpress4.1

1. 添加/修改wp-config.php文件 <?php /** * WordPress 基础配置文件. * * 本文件包含以下配置选项: MySQL 设置.数据库表名前缀. * 密匙.WordPress 语言设定以及 ABSPATH.如需更多信息,请访问 * {@link http://codex.wordpress.org/Editing_wp-config.php 编辑 * wp-config.php} Codex 页面.MySQL 设置具体信息请咨询您的空间提供商. * * 这个文件用

新浪SAE快速上手教程

 新浪SAE快速上手教程[1]如何免费开通新浪云 2014-07-18 > 新浪SAE快速上手教程[2]如何创建.删除应用 2014-07-24 > 新浪SAE快速上手教程[3]如何上传应用代码包 2014-07-24 > 新浪SAE快速上手教程[4]如何在线编辑代码? 2014-07-28 > 新浪SAE快速上手教程[5]如何用svn部署代码 2014-07-28 http://jingyan.baidu.com/season/43090

发布django到新浪SAE

很早新浪SAE就支持python.加以利用,挂载一些自己的小应用. 发布django应用到SAE,流程还是比较简单的. 1.首先在SAE新建一个Python应用. 新建空应用,直接上传本地已经写好的django应用代码. 新建完成后,本地目录的结构,很简单. 包括两个文件: index.wsgi和config.yaml 2.需要修改两个配置文件 .wsgi文件修改内容为 import os import django.core.handlers.wsgi import sae os.enviro