[翻译] URL 重写新手指南

30. 8 月 2016 服务器 0

本文由 伯乐在线Delostik 翻译,牧师 校稿。未经许可,禁止转载!
英文出处:addedbytes。欢迎加入翻译组
伯乐在线地址:http://blog.jobbole.com/104898/

URL重写是什么?

大多数动态网站的URL中都含有变量,以告知站点哪些信息需要展示给用户。比如像下面这个URL,会通知相关的脚本加载编号为7的产品:

这种URL结构的问题在于它并不容易记忆。如果是在电话中也很难读出来(令人惊讶的是有很多人通过这种方式传递URL)。搜索引擎和用户都不能从URL中得到有用的内容信息。你没办法从URL看出在这个页面能买挪威的蓝鹦鹉(的羽毛)。这种是相当标准的URL——也就是一般你在CMS网站上看到的那种。相比下面的URL:

这种URL更清晰,也更短,更容易记忆,也更容易被念出来。尽管如此,它还是不能告诉别人它所指向的内容是什么。但是我们可以更进一步:

这就是我们要的东西了。即使不看上下文,我们也可以从这个URL中看出你要找的东西就在这个页面上。搜索引擎可以将这个URL分割成单词(搜索引擎会将URL中的连字符当做空格,但是下划线不是),然后根据这些信息更好地判断页面内容。这种URL是易于记忆和传递的。

不幸的是,要让服务器理解最后一种URL,需要我们做一番工作。当URL发起一个请求,服务器需要知道如何处理URL,才能知道该返回给用户什么内容。URL重写就是这种将最后一种URL“翻译”成服务器能理解的语言的技术。

平台和工具

根据你的服务器上运行的软件,你可能已经有URL重写模块。如果没有,大多主机都提供启用或安装相关模块的功能,你可以尝试启用它。

Apache启用URL重写是最简单的,它通常带有自己的内建URL重写模块——mod_rewrite,启动和使用mod_rewrite就像上传和命名文件一样简单。

IIS是微软的服务器软件,标配并不包含URL重写的能力,但是有很多插件提供了这种功能。ISAPI_Rewrite 是我比较推荐一款插件,这是我发现的一款功能最接近mod_rewrite的插件。在这篇文章的最后附有ISAPI_Rewrite的安装和配置说明。

下面的代码是一些使用mod_rewrite的例子。

基本的URL重写

首先我们来看一个简单的例子。我们有一个网站,含有一个单独的PHP脚本,展示了一个单独的页面,URL如下:

我们想要简化URL,理想的URL像这样:

为了让这个URL有效,我们需要让服务器在内部将所有的“pet-care”的请求重定向到“pet_care_info_07_07_2008.php”。我们希望这个工作在内部进行是因为我们不希望用户浏览器的地址栏发生改变。

为了达到这个目的,我们首先需要建立一个名为“.htaccess”的文本文档来存储我们的规则。这个文件必须命名成这样(不能是“.htaccess.txt”或者“rules.htaccess”)。这个文件应该放在服务器的根目录(本例中放在与 “pet_care_info_07_07_2008.php” 相同的目录中)。可能那里已经有一个.htaccess文件了,这时我们就应该编辑这个文件而不是覆盖它。

.htaccess文件是服务器的配置文件。如果文件中有错误,服务器会提示错误信息(通常错误代码是500)。如果使用FTP协议向服务器发送文件,必须使用ASCII编码传输,而不是BINARY。在本例中,这个文件有两个作用:1. 通知Apache启动重写引擎; 2. 把我们的重写规则告诉Apache。因此我们需要在这个文件中加入以下内容: