如何通过自定义 rewrite 规则来提高网站 SEO 并处理网站业务逻辑

关键字:又拍云、rewrite 、SEO、重定向、CDN 

前言

如果您正在建设一个新网站或者对现有网站重新设计,我们认为您应该将网站的 URL 转换为用户友好的 URL,或搜索引擎友好的 URL,这类 URL 我们也称为语义 URL(Semantic URL )。哪些 URL 是语义 URL 呢?通过如下举例来进行说明。首先让我们来看一下搜索引擎比较厌烦的 URL:`http ://example.com/product.php?id=28&name=phone ….`很明显,当用户看到像以上的一个 URL 的时候,根本弄不清楚当前看到的是那个产品的信息。所以,我们有必要将 URL 改成以下形式的链接:`http://example.com/product/28/phone/….`,可以看到转换之后的 URL 更容易被人类看懂,这类 URL 就是语义 URL。

除此之外,网站一些业务逻辑的实现您更希望放在云平台上来进行计算和处理,直接在 CDN 边缘网络中来执行前向重写逻辑,避免对数据中心来回提出请求,一方面可以提升用户体验,另一方面可以减轻源站压力。这些业务逻辑的处理包括如下:

  •  请求重定向
  •  请求禁止
  •  HTTP 头部修改
  •  请求限速策略 

以上业务逻辑的处理,您都可以通过又拍云自定义 rewrite 规则来实现。此时您会说,那什么是自定义 rewrite ? 如何配置 rewrite 规则来实现业务逻辑及 URL 改写?接下来的章节我们会一一展开。

什么是自定义 rewrite ?

又拍云自定义 Rewrite 是基于 DSL ( Domain Specific Language ) 理念来设计的,主要面向开发者使用。充分利用又拍云 CDN ( Content Delivery Network )分布式边缘网络的性能及规模,通过又拍云管理控制台可轻松创建 rewrite 规则,可以实现对 URL 的改写、重定向、自定义 HTTP 头、请求禁止等处理逻辑。详细介绍可参见  http://docs.upyun.com/cdn/advanced/#rewrite

举个栗子:

最常见的做法,就是将一组 URL 层次结构字符串,转换成带有 Query String 的 URL,或是反向转换,例如: `http://www.upyun.com/1/test/test` 经过 URL 重写后,实际的 URL 为:`http://www.upyun.com/1/web/index.php?test/test`。因此,最终用户可以使用较直接的方式来输入 URL(这也是 REST 的主要目的),是搜索引擎优化(SEO)的作法之一。而应用程序开发者可以利用这个机制来将参数隐藏起来,可避免让网络上的恶意用户收集到有利于发动攻击的信息。

如何配置

通过以上章节,已经理解什么是自定义 rewrite 了。接下来,就是如何进行 rewrite 规则的编写和调试了。

准备工作

1、创建 CDN 服务

如果您需要配置自定义 rewrite 规则,前提条件是在又拍云平台创建 CDN 服务,具体创建步骤可参见创建服务指南 http://docs.upyun.com/cdn/basic/#_1

2、熟悉 rewrite 函数、变量、字符串变量及其使用方法

自定义 rewrite 支持的函数超过 40 个,变量超过 15 个。所以您必须要理解和熟悉每个函数及变量的含义以及使用方法,才可以开始编写规则。详细了解请参见自定义 rewrite 介绍:

http://docs.upyun.com/cdn/advanced/#rewrite

3、确定需要 rewrite 的 URL 

编写规则 

又拍云自定义 rewrite 规则包括 `URI 提取正则`和 `rewrite 规则` 两个部分,分别对应下面的 `pattern` 和 `rule` 部分,具体参见如下示例:

pattern: ^pay/([0-9]+)/([0-9]+)/(.*?).htm$
rule:  /pay.php?payid=$1&categoryid=$2

第一部分:正在找什么?

上述的 `pattern` 也即 `URI 提取正则` ,以上正则表达式定义了正在找什么。此处我们将该正则表达式进行拆分下,然后一一对应,假如示例 URL 为:`http://example.com/pay/25/8/…`

  • `^pay/` 告诉 Web 服务器,试图匹配的 URL 必须以 `pay/` 这个字符串开头,这与示例 URL 中的 `pay/` 匹配
  • 接下来的 `([0-9]+)` 告诉 Web 服务器在 `/` 后面紧跟的是 `0-9` 之间的数字,该数字至少出现一次 ,用来匹配的 `rule` 中的 `payid`
  • 继续匹配 `/`,然后又是一个 `([0-9]+)` ,道理一样,用来匹配`rule`中的 `categoryid`
  • 继续匹配 `/`,`(.*?).htm` 匹配任何以 `.htm` 为后缀名,由任何数字或者字符为前缀
  • 最后,`$` 表示匹配匹配字符串结尾

第二部分:到哪里去?

这里就不详细介绍了,该规则是常规的动态 URL 的解析。以上规则生效之后,会将 URL:

`http://example.com/pay/25/8/…` 转换为 `http://example.com/pay.php?payid=25&categoryid=8…`

最后的配置界面如下图所示:


配置测试

以上规则已经编写完毕,如何进行调试,确保以上规则书写正确,这个时候需要使用到 `调试模式`,默认为开启状态。可以使用命令行工具 curl 即可对规则进行调试:

curl -H "X-Upyun-Rewrite-Preview: true" http://example.com//pay/25/8/… -v


正式启用

以上经过调试,确定该 rewrite 过程符合预期后,即可将 `调试模式` 关闭,此时该 rewrite 过程会对所有命中的请求生效。

案例介绍

1)URL 重定向

rule:$WHEN($NOT($EQ($_URI, /live.html)), $NOT($_COOKIE_token))$REDIRECT($_SCHEME://$_HOST/live.html)


规则解释:当 `cookie` 中 `token` 值为空时,则跳转到指定到地址 `$_SCHEME://$_HOST/live.html`。

2)修改 HTTP 头部

rule: $DEL_REQ_HEADER(If-Range)  


规则解释:删除 `If-Range` 请求头,忽略 `if-range` 头部。

核心优势

总结下,又拍云自定义 rewrite 具有如下优势及价值,罗列如下:

1)可以配合网站将动态 URL 转换为语义 URL,以改善搜索引擎索引编制,从而提高 SEO 排名;

2)在又拍云的边缘网络中执行前向重写逻辑,避免对数据中心来回提出请求,从而提高服务性能并减轻工作量 ;

3)应用程序开发者可以利用 URL 改写这个机制来将参数隐藏起来,可避免让网络上的恶意用户收集到有利于发动攻击的信息

4)充分利用又拍云 CDN 平台的性能及规模,可靠且可扩展,服务能力可以得到最大化;

5)充分利用又拍云 CDN 边缘网络的计算能力,减轻客户源站计算压力,进而节省资金开销,有效降低成本;

6)基于 CDN 平台,可以快速部署和下发,全网可以在一分钟之内生效;

 

留下一个评论