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

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()

关于以上形式说明如下:

1) in_header 是请求头,out_header 是响应头,header_name 是 header 的名字,这个我们一般用到的不多

2) op 是操作符,有 ~(正则匹配) !~(正则不匹配) ==(相等,用于字符串和数字) !=(不相等,用于字符串和数字) >, >=, <, <=(比较操作符仅用于整形数字),其中~正则匹配 用的比较多

3) string 是形如 “xxxx” 的字符串

4) string_or_digit 表示 string 或者 digit,根据 op 的种类,后面跟 string 或者 digit

5) path 是系统宏,表示用户请求的 url 去掉主机部分和查询串后剩下的部分,用到的很多,例如:http://www.xxx.com/list/test.php?id=23  path就是 /list/test.php

6) query_string 是系统宏,表示查询串,一般是url中问号后面的内容 例如上面 的url 中的 id=23

7) is_file() 和 is_dir 是系统函数,判断 path 是文件还是目录,!is_file(),!is_dir() 分别是其否定形式。(使用也比较多)

2、URL重写

- rewrite: if (表达式) goto 目标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″

尾语

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

另外附上一个Appconfig 配置生成工具 http://saetools.sinaapp.com/
本文参考新浪sae http://sae.sina.com.cn/?m=devcenter&catId=193

新浪sae url rewrite(伪静态、重定向)详解的更多相关文章

  1. 新浪SAE URLRewrite(伪静态、重定向)详解

    SAE全称Sina App Engine,真是一个好东西,他有很多优秀的特性,简单来说SAE就是一个简单高效的分布式Web服务开发.运行平台.支持现在常用的 PHP+Mysql 环境,在开发中难免会碰 ...

  2. 【解决】 新浪sae固定链接404 问题

    固定链接404 固定链接是一个很重要的内容,wordpress默认的链接很复杂,也不利于搜索引擎搜索.wordpress也提供修改固定链接的功能,在设置里面[固定链接]修改. 但是,使用新浪sae的小 ...

  3. 新浪SAE中文分词接口

    最近发现新浪SAE平台上竟然也提供分词功能,分词效果也还不错,由新浪爱问提供的分词服务,研究了一番,做了一个简易版的在线调用接口(get方式,非post) 官网说明:http://apidoc.sin ...

  4. 新浪SAE部署django博客

    步骤: 第一步:注册新浪SAE账号(即新浪微博),下载TortoiseSVN 第二步:部署代码 使用SAE来部署代码,SAE提供的是PAAS层的云服务,即不是给你一个虚拟主机而是直接上传应用.进入SA ...

  5. 如何利用php+android+新浪sae服务器做一个app下载应用

    功能简介:提供一个app下载的平台,类似于appstore,上面有很多app可供下载 实现基本思路:利用android,在手机桌面建立一个图标,点击该图标不是打开app应用,而是跳转到一个web页面, ...

  6. 新浪SAE创建微信模板消息应用与SVN的使用

    本地项目源文件必须放在应用名目录下面的数字目录里面.如:D:\SVN\xtmp1\1 我们在前面讲述在新浪SAE中如何建站,今天我们来详解如何上传文件.新浪SAE中是不允许用FTP来上传的.我们只能用 ...

  7. 微信公众号申请+新浪SAE申请

    一. 新浪SAE服务申请 1. 注冊地址:http://t.cn/RqMHPto 2. 选择控制台>>云应用SAE 3. 创建新应用 4. 填写域名 5. 代码管理选择SVN 6. 创建版 ...

  8. 国内云引擎平台概览——新浪SAE,阿里ACE,百度BCE

    新浪SAE 平时大家的測试server都是执行在自己的PC上面,用Tomcat或者IIS搭建的本机server. 事实上新浪云平台SinaAppEngine也是挺好用的. 今天总结一下我使用过程中的一 ...

  9. 新浪sae上安装原生wordpress4.1

    1. 加入/改动wp-config.php文件 <?php /** * WordPress 基础配置文件. * * 本文件包括下面配置选项: MySQL 设置.数据库表名前缀. * 密匙.Wor ...

随机推荐

  1. PHPExcel方法总结

    下面是总结的几个使用方法include 'PHPExcel.php';include 'PHPExcel/Writer/Excel2007.php';//或者include 'PHPExcel/Wri ...

  2. 008.CI4框架CodeIgniter, Controller控制器传输参数到View视图

    01. 在CI4中输出VIEW视图,并且传入参数,代码如下: <?php namespace App\Controllers; class Home extends BaseController ...

  3. Java中null的判断

    Java中空指针的异常十分常见 if (name != null && !name.equals("")) { //do something } 或者 if (!& ...

  4. leetcode1 twoSum

    """ Given an array of integers, return indices of the two numbers such that they add ...

  5. use matplotlib to draw scatter plot

    There are many pionts in this kind of table. How to do it? We can use scatter() to draw it. Code: im ...

  6. P1084 外观数列

    转跳点:

  7. SpringMVC核心

    DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,与spring IoC容器无缝集成. 主要用作职责调度工作,本身主要用于 ...

  8. C++(五)构造函数

    //构造函数的作用:就是在函数被创建时使用特定的值构造对象,将对象初始化为一个特定的初始状态//例如在构造一个clock类对象的时候,将初始的时间设定为0:0:0//构造函数的名必须与类名相同,不能定 ...

  9. centos7上安装mysql8

    话不多说仍然是更换虚拟机的系列安装. 一.首先下载最先版的mysql.到官网下载https://dev.mysql.com/downloads/file/?id=477146 下载后上传linux到相 ...

  10. cf 500 D. New Year Santa Network

    直接按边分,2个点在边的一边,1个在另一边,组合出来就是这个边对答案的贡献,权值换了就再重新算个数而已. #include <bits/stdc++.h> #define LL long ...