欢迎光临
我们一直在努力

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

建站超值云服务器,限时71元/月

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 是形如 &ldquo;xxxx&rdquo; 的字符串

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 ~ &ldquo;^(so)$&rdquo; && path ~ &ldquo;zhaochou$&rdquo;) goto &ldquo;/url/%1&Prime;

– rewrite: if(is_dir( ) && path ~ &ldquo;urldir/(.*)&rdquo;) goto &ldquo;/url/$1&Prime;

– rewrite: if( !is_file() && !is_dir()) goto &ldquo;index.php?%{QUERY_STRING}&rdquo;

比如我们要先下面的伪静态

实例1

真实处理地址为: www.xxx.com/index.php?a=list&b=new&id=23

要伪静态成这样:www.xxx.com/list-new-23.html

规则 -rewrite: if(path ~ &ldquo;list-new-(\d+)\.html&rdquo;) goto &ldquo;index.php?a=list&b=new&id=$1&Prime;

实例2

真实处理地址为: www.xxx.com/index.php?a=list&b=new&id=23

要伪静态成这样:www.xxx.com/list-new.php?id=23

规则 -rewrite: if(path ~ &ldquo;list-new\.php&rdquo; && query_string ~ &ldquo;id=(\d+)&rdquo;) goto &ldquo;index.php?a=list&b=new&id=%1&Prime;

3、自定义目录默认页面

当访问url没有指定文件的路径时,返回aaa.php,如果其不存在,则返回bbb.html

    &ndash; directoryindex: aaa.php bbb.html

4、自定义错误页面(404页面等)

    遇到 404 错误,返回 /path/404.html 文件。

    遇到 403 错误,返回 /path/403.html 文件

    &ndash; errordoc: 404 /path/404.html

    &ndash; errordoc: 403 /path/403.html

5、对文件目录进行简单的访问权限认证

   访问secret目录需要密码,允许用户test用密码123qwe访问,用户coder用密码123asd访问

    &ndash; passwdaccess: if(path ~ &ldquo;/secret/&rdquo;) passwd &ldquo;test:123qwe coder:123asd&rdquo;

    访问.text结尾的文件需要密码,允许用户writer用密码123zxc

    &ndash; passwdaccess: if(path ~ &ldquo;\.text$&rdquo;) passwd &ldquo;writer:123zxc&rdquo;

    所有访问都要密码,允许用户writer用密码123zxc访问

    &ndash; passwdaccess: passwd &ldquo;write:123zxc&rdquo;

    用户的网站后台程序都放在admin目录下,需要对admin目录做密码保护

    &ndash; passwdaccess: if(path ~ &ldquo;/admin/&rdquo;) passwd &ldquo;admin:admin123&Prime;

尾语

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

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 新浪sae url rewrite(伪静态、重定向)详解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址