`
gosin
  • 浏览: 3253 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

新浪SAE如何处理泛域名的问题

SAE 
阅读更多

 

新浪SAE 如何处理泛域名的问题

今天看到论坛社区总有人问这个问题,特意整理了一下。

针对 qmei.sinaapp.com以及qlove.sinaapp.com这个例子,如何做到点击链接后,跳转到其他网站。

如图

 

 

 

 

 

 

 

 

 

 

 

这样子就可以实现这个功能了。

另附录上 config.yaml文件常见配置

 

使用指南

 设置

    例子:

    name: saetest

    version: 1 

    编辑saetest/1/config.yaml ,增加 handle 段,如:

    name: saetest

    version: 1

    handle:

    - rewrite: if(!is_dir() && !is_file()) goto "index.php?%{QUERY_STRING}" 

    编辑完成后,通过 SVN代码部署 工具提交即可生效。或者你也可以通过 在线代码编辑器 修改config.yaml

    如果通过SVN 部署,只需要在默认版本所在目录下,如,您的应用名为 devapp ,默认版本是 3 ,那么请在 devapp/3/ 下创建 config.yaml 文件,按下以下语法编写,然后通过 svn commit 部署完成即可生效。

 语法说明

     AppConfig 的语法分两种,一种是简单的参数罗列方式,一种是灵活的表达式语法,不同的功能会用到不同的类型的语法。

  参数方式

   目录默认页面

    - directoryindex: file_list

    file_list 中各个文件名以空格分隔, directoryindex 在  yaml  文件中仅有一项

    例子:

    - directoryindex: aaa.php bbb.html

   自定义错误页面

    - errordoc: httpcode error_file

    httpcode 是诸如 404 302 之类的 http 响应码, error_file 是服务器以  httpcode 响应请求时响应的文件。 errordoc yaml 中可以配置多项。

    - errordoc: 404 /path/404.html

    - errordoc: 403 /path/403.html

  表达式语法

    其他功能需要用到表达式语法,其形式为:

    if (expression) do_something

    expression 有如下形式:

    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  的名字,具体的请求头和响应头参考 RFC 官方文档

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

    3) string 是形如  "xxxx"  的字符串

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

    5) path 是系统宏,表示用户请求的  url  去掉主机部分和查询串后剩下的部分

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

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

    表达式语法用于以下功能:

   压缩

    - compress: if (single_express) compress

    在 compress  中  single_express  表示单一的表达式,不能用  &&  做复合, in_header out_header path  都可以出现在  single_express 

    例如:

    - compress: if(out_header["Content-Length"] >= 10240) compress

    - compress: if(in_header["Referer"] == "gphone") compress

    - compress: if(path ~ "/big/") compress

   URL重写

    - rewrite: if (complex_express) goto target_url

    在 rewrite  中, complex_express  可以用  &&  连接,组成复合表达式。除  out_header  (没办法根据响应  header  做重定向) 外都可以出现在  rewrite  的  if  中,并且  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}"

   指定过期时间和头信息

    - expire: if (single_express) time seconds

    - mime: if (single_express) type content-type

    seconds 是秒数, content-type  是表示文档类型的字符串。

    例如:

    - expire: if(in_header["referer"] ~ "sina") time 10

    - mime: if(path ~ "\.pdf2$") type "application/pdf"

   设置响应header Content-Type

    如果 url  请求文件的扩展名是  pdf2 ,设置  Content-Type  为  application/pdf

    - mime: if(path ~ "\.pdf2$") type "application/pdf"

 

    只要请求 header referer  包含字符串  sina ,就设置  Content-Type  为  text/plain

    - mime: if(in_header["referer"] ~ "sina") type "text/plain"

 

    在 expire  和  mime  中  single_express  表示单一的表达式,不能用  &&  复合, in_header path  都可以出现在  single_express  中,并且  op  只能是  或者  == ,即只支持正则匹配和字符串比较。

 

   基于主机的访问控制

    禁止127.0.0.1  访问 private 目录

    - hostaccess: if(path ~ "/private/") deny "127.0.0.1" 

 

    只允许127.0.0.1  访问 .conf 结尾的文件

    - hostaccess: if(path ~ "\.conf$") allow "127.0.0.1" 

 

    禁止127.0.0.1  的所有访问(这个要慎用)

    - hostaccess: deny "127.0.0.1" 

 

    对 cron 任务保护,防止被外部抓取,我们将 cron 任务放在 cron 目录下(sae cron 服务执行时,走的是内部网络)

    - hostaccess: if(path ~ "/cron/") allow "10.0.0.0/8" 允许 10 打头的所有 IP 

 

 

    对于屏蔽一组IP 地址,可以写成子网掩码形式,或者将多个 IP 之间加以空格。子网掩码形式如下:

    - hostaccess: if(path ~ "/cron/") deny "108.192.8.0/24" 屏蔽 108.192.8 打头的所有 IP 

    多个IP 形式如下:

    - hostaccess: allow "108.134.13.24 108.122.122.13" 允许 108.134.13.24 108.122.122.13 这两个 IP

    或:

    - hostaccess: allow "108.134.13.24","108.122.122.13"

 

 

    (ip地址需要加引号, all 代表所有 IP 地址,具体可以参考 Apache配置 . allow 是白名单方式, deny 是黑名单

 

   简单的认证

    访问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"

 

 

    在 hostaccess  和  passwdaccess  中  single_express  表示单一的表达式,不能用  &&  复合, in_header path  都可以出现在 single_express  中,并且  op  只能是  或者  == ,即只支持正则匹配和字符串比较,并且  if  语句可以省略,表示无条件执行访问控制

 

备注和说明

    更多例子:

 目录默认页面

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

    - directoryindex: aaa.php bbb.html 

 自定义错误页面

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

    - errordoc: 404 /path/404.html

    - errordoc: 403 /path/403.html 

 压缩

    当页面内容大于 10K 字节时压缩

    - compress: if(out_header["Content-Length"] >= 10240) compress 

 

    当请求 header Content-Type  中包含  text  时压缩

    - compress: if(out_header["Content-Type"] ~ "text") compress 

 

    当响应 header Referer  等于  gphone  时压缩

    - compress: if(in_header["Referer"] == "gphone") compress 

 

    当请求的 url  包含 “/big/”  时压缩

    - compress: if(path ~ "/big/") compress 

 

    注:对所有的压缩,请求 header Accept-Encoding  包含  gzip,deflate  是题中之意。

    压缩配置注意事项

    通常情况,我们根据响应头Content-length ,判断是否需要压缩,例如: if(out_header["Content-Length"]>=10240) compress, 这个静态页面,如 js,css,html 都是没有问题的。

    但是对php 脚本,响应 header 中,没有 Content-length 这个头,它使用 Transfer-Encoding: chunked ,这个头表示页面输出用 chunked 编码。此时要实现压缩,可以通过配置 appconfig ,同时在php 脚本中输出相应头的方式实现。

    例如在 appconfig 中写 if(out_header["Use-Compress"] == "1") compress ,在需要压缩的 php 脚本中写

    压缩生效检查

    检查是不是输出了响应头:Content-Encoding: gzip

    IE下的 HttpWatch FireFox 下的 Firebug 都可以查看页面的响应 header

 页面重定向

    当 url  匹配  urldir/(.*)  ,并且 输入  header referer  等于  sina  时,跳转至页面  /usr/$1 $1  表示刚刚匹配的  urldir/(.*)  中的  (.*)  部分。

    - rewrite: if (path ~ "urldir/(.*)" && in_header["referer"] == "sina") goto "/url/$1" 

 

    当 url  匹配  urldir/(.*) ,并且请求的是一个目录时,跳转至  /url/$1

    - rewrite: if(is_dir( ) && path ~ "urldir/(.*)") goto "/url/$1" 

 

    当 url  匹配  path ,并且请求的不是一个文件时,跳转至  /url/query.php

    - rewrite: if(! is_file() && path ~ "path") goto "/url/query.php" 

 

    当查询串等于so ,并且  url  以  zhaochou  结尾时,跳转至  /url/%1 %1  表示  query_string  匹配到的部分。

    - rewrite: if(query_string ~ "^(so)$" && path ~ "zhaochou$") goto "/url/%1" 

 

    当查询串不包含sohu ,并且  url  以  zhaochou  结尾时,跳转至  /url/query.php?%{QUERY_STRING} %{QUERY_STRING}  表示查询串。

    - rewrite: if(query_string !~ "sohu" && path ~ "zhaochou$") goto "/url/query.php?${QUERY_STRING}" 

 

    如果 url  既不是文件,也不是目录,跳转至  index.php?%{QUERY_STRING}

    - rewrite: if( !is_file() && !is_dir()) goto "index.php?%{QUERY_STRING}" 

 

 设置响应头的mime 类型

    如果 url  请求文件的扩展名是  pdf2 ,设置  Content-Type  为  application/pdf

    - mime: if(path ~ "\.pdf2$") type "application/pdf" 

 

    只要请求 header referer  包含字符串  sina ,就设置  Content-Type  为  text/plain

    - mime: if(in_header["referer"] ~ "sina") type "text/plain" 

 

 页面过期

    如果请求 header Referer  包含 字符串 sina ,设置过期时间 10s

    - expire: if(in_header["referer"] ~ "sina") time 10 

 

    如果 url  以  lib\.js  结尾,设置过期时间 100s

    - expire: if(path ~ "lib\.js$") time 100 

 

FAQ

    1. 如果有形如  path ~ "^(.*)$"  类的请求,一定要加上  is_file  或  is_dir  之类的判断,防止无穷的 rewrite 。 

    2. path 是用户请求的资源路径,比如请求  http://qlove.sinaapp.com/b/index.php?a=4 ,那么 path 就是  /b/index.php 。 

    3.  goto 语句中,虽然某些时候可以不以 / 开头,但是强烈建议以 / 开头。 

    生效检查

    检查是不是输出了响应头:Cache-Control IE 下的 HttpWatch FireFox 下的 Firebug 都可以查看页面的响应 header

分享到:
评论

相关推荐

    新浪云计算SAE免费空间申请使用及域名.docx

    新浪云计算SAE免费空间申请使用及域名.docx

    新浪云计算SAE免费申请使用及域名绑定.docx

    新浪云计算SAE免费申请使用及域名绑定.docx

    新浪sea云java开发包及工具集成,包括sae-1.1.0-all,svn6个jar包,sae-eclipse

    实现便捷的在本地 eclipse 上开发,在 sae 云服务器上部署和调试,实现在 eclipse 上编译 java web 项目的时候自动生成 war 包,然后再自动通过 svn 上传部署到新浪 sae 云平台的流程,1. 下载 Eclipse 4.2 or 4.3 ...

    phpTxt成绩查询系统通用版v7.5SAE版

    这是SAE专版,新浪SAE免费空间可以直接上传使用,让你的查询可以做到完全免费(免费空间 免费代码 免费新浪三级域名)。 这是个极为简单却非常通用、非常方便的成绩查询系统,通用于几乎所有Excel单二维数据表查询...

    SaeServer(SAE本地开发环境)v1.1

    因为新浪SAE环境和普通环境的不同,许多SAE提供的服务不能在本地运行。 往往我们写的代码不能在本地测试,每次必须上传到SAE上面进行测试。现在不用 这么麻烦,SaeServer在本地模拟SAE服务。让程序也能在本地进行...

    wechat_forward:基于新浪SAE的微信后台,转发到本地并弹幕显示

    基于新浪SAE的微信后台,转发到本地并弹幕显示 代码包括三部分 server 这一部分代码运行在新浪的SAE服务器上。部署方法如下: 在SAE上创建一个新应用, 再将server文件夹中的三个文件拷贝到原程服务器上即可。 注意...

    美容新闻免自动采集淘客源码 v1.0

    可选择是否应用新浪SAE平台 支持 新浪SAE环境 与普通环境自由切换4.自定义推广产品5.自定义广告链接6.自定义文章替换规则方便推广7.自定义是否开启缓存 自定义缓存时间8.url采用base64_decode处理9.本站代码完全开源...

    7ghost反向绑定域名程序 1.0.zip

    如果你用过谷歌的GAE、新浪的SAE免费空间的话,那么肯定知道反向绑定域名是多么得有用了,它可以让你将自己的域名绑定到任意空间上,即使这个空间不支持绑定域名,有点强制的味道。 使用网站反向绑定域名还有一个...

    MiinCMP 企业网站系统 v1.0.5 新浪云版.zip

    新浪SAE云安装说明: 安装MiinCMP前,请确认你已激活Mysql数据库。 有关在SAE上的详细安装 信息见, juuluu   在Java应用中使用SAE提供的MySQL服务很简单,你就像使用普通的MySQL一样即可,当然你需要开启MySQL...

    PHP+MYSQL淘宝自动发货提货系统-卡密发货淘宝API接口+视频安装教程.zip

    7、本程序不限制域名,单用户版本,支持sae、bae、虚拟主机等。 8、完全开源,无加密代码。 9、安装请参考压缩包内视频教程,新版本也有文档版本的安装方法。 淘宝应用:http://open.taobao.com/index.htm

    Z-BlogPHP 1.3 SAE云专版

    SAE云专版可以安装在新浪SAE云平台上,是Z-Blog团队专为SAE量身打造的Z-BlogPHP系统。 Z-BlogPHP是Z-Blog团队根据国内独立博客用户需求而全新开发的一款博客系统,作为领先的博客系统提供者,我们希望提供完善的...

    淘宝自动发货提货系统 v1.0

    本程序为了考虑一些卖虚拟商品的卖家不会建站而又想拥有...配置个人的新浪免费空间3、上传程序4、修改个人信息5、配置淘宝授权6、系统的设置和使用7、本程序不限制域名,单用户版本,支持sae、bae、虚拟主机等。8、完

    php+Txt 成绩查询系统通用版 v7.5 SAE版

    这是SAE专版(linux版),新浪SAE空间可以直接上传使用让你的查询可以做到完全(空间+代码+新浪三级域名)。 这是个极为简单却非常通用、非常方便的成绩查询系

    淘宝自动发货提货系统 v1.0.rar

    源码可以使用sae,bae,部分虚拟主机不可用哦,建议新浪使用sae; 1、如何申请新浪免费空间 2.配置个人的新浪免费空间 3、上传程序 4、修改个人信息 5、配置淘宝授权 6、系统的设置和使用 7、本程序不限制...

    通过新浪云部署NideShop微信小程序商城(基于Node.js+MySQL+ThinkJS) ...

    一、购买新浪云SAE 为什么选择SAE? 免费二级域名和支持https访问,不用备案,可用于做微信小程序服务器。 SAE推荐链接:http://sae.sina.com.cn/ 选择对应的部署环境 自定义 -&gt; 开发言语:自定义 -&gt; 运行环境:云...

    web-SAE-Wechat-control-led.zip_单片机开发_C/C++_

    此源码为STM32f103vet6芯片与ESP8266 WiFi模块的驱动源码,可以连接外网,示例中的为连接新浪的域名和数据库实现通过微信经过外网控制led灯的程序,还有一个新浪sae端的php程序

    wechat_oauth2.0_python:基于wechat公众平台,sae,webpy实现Oauth2.0

    1,准备工作:注册微信公众平台测试号,注册新浪sae并在上面建一个应用,熟悉python的webpy框架 2,应用与微信进行绑定:登录微信平台,填写应用的url及token项,若填写的URL正确响应微信发送的Token验证,则绑定完成...

    php飞信每日自动天气预报

    新浪SAE免费php空间申请地址:http://sae.sina.com.cn/activity/invite/101149/weibo 新浪SAE免费php空间注册功略:http://hbwanghai.blog.163.com/blog/static/199297147201222310226519/ 优点 1.不用购买独立空间/...

    毕业设计php源码-PHP-GraduationProjectManageSystem:Anexperimentalproject.一个实验性

    在新浪云中创建一个Storage服务的域名,安全权限全部取消(DEMO中并没有编写access key加密),修改源代码upload.php中的SAE部分即可。 特色功能 MySQL存储的密码采用SHA-256散列配Base64压缩加密,用户敏感操作时会...

Global site tag (gtag.js) - Google Analytics