新浪云计算SAE免费申请使用及域名绑定(4)

时间:2016-09-24 05:16:46 

三、SAE空间自定义 web 服务器配置语法

1、Appconfig提供了强大的Web服务器配置,实际上这也是将SAE打造为PHP空间的有力工具,掌握好这些语法可以帮助我们更好地来使用新浪SAE空间。

2、目录默认页面:当访问url没有指定文件时,指定返回的文件。

语法:

- directoryindex: FILE [...]

directoryindex在config.yaml文件中仅有一项

例子:

- directoryindex: aaa.php bbb.html

3、自定义错误页面。

语法:

- errordoc: httpcode error_file

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

例子:

- errordoc: 404 /path/404.html - errordoc: 403 /path/403.html

4、压缩

语法:

- compress: if (CONDICTIONs) compress

在compress中,CONDITIONs只能有一个CONDITION。

例子:

- compress: if (%{RESP:Content-Length} >= 10240) compress

- compress: if (%{REQ:Referer} == "gphone") compress

- compress: if (%{REQUEST_URI} ~ "/big/") compress

注解

通常情况,我们根据响应头Content-length,判断是否需要压缩,例如:if (%{RESP:Content-Length} >= 10240) compress,这个静态页面,如js,css,html都是没有问题的。但是对php脚本,响应header中没有Content-length这个头,它使用Transfer-Encoding: chunked,这个头表示页面输出用chunked编码。此时要实现压缩,可以通过应用配置,同时在PHP脚本中输出相应头的方式实现。

5、URL重写

语法:

- rewrite: if (CONDITIONs) goto target_url

在rewrite中,CONDITIONs支持多个CONDITION。除HTTP响应header(没办法根据响应 header 做重定向)外都可以出现在rewrite的CONDITION中。

target_url表示重定向的目标url,在target_url可以以$N的形式引用CONDITION中以%{REQUEST_URI}为条件正则匹配到的组, 以%N的形式引用以%{QUERY_STRING}为条件正则匹配到的组。

例子:

# 强制使用https访问

- rewrite: if (%{REQ:X-Forwarded-Proto} != "https") goto "https://%{HTTP_HOST}%{REQUEST_URI}"

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

- rewrite: if (%{REQUEST_URI} ~ "urldir/(.*)" && %{REQ:REFERER} == "sina") goto "/url/$1"

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

- rewrite: if (-d && %{REQUEST_URI} ~ "urldir/(.*)") goto "/url/$1"

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

- rewrite: if (!-f && %{REQUEST_URI} ~ "path") goto "/url/query.php"

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

- rewrite: if (%{QUERY_STRING} ~ "^(so)$" && %{REQUEST_URI} ~ "zhaochou$") goto "/url/%1"

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

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

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

- rewrite: if (!-d && !-f) goto "/index.php?%{QUERY_STRING}"

警告

如果有形如%{REQUEST_URI} ~ “^(.*)$”类的请求,一定要加上是否是目录或者文件,防止无穷的rewrite。 在goto语句中,虽然某些时候可以不以/开头,但是强烈建议以/开头。

6、指定过期时间和头信息

语法:

- expire: if (CONDITION) time seconds

- mime: if (CONDITION) type content-type

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

例子:

- expire: if (%{REQ:REFERER} ~ "sina") time 10

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

- mime: if (%{REQUEST_URI} ~ ".pdf2$") type "application/pdf"

- mime: if (%{REQUEST_URI} ~ ".pdf2$") type "application/pdf"

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

- mime: if (%{REQ:REFERER} ~ "sina") type "text/plain"

if语句支持单个CONDITION。可以出现在CONDITION中的变量参考 Apache Docs ,只支持字符串和正则匹配。

看不过瘾?点击下面链接!
本站微信公众号:gsjx365,天天有好故事感动你!

上一页123456下一页

相关电脑知识

美图欣赏

电脑知识排行榜