考虑之前提到的指导方针和推荐方法,本节展示的解决方案是使用Apache的mod_rewrite模块在WEB应用程序中实现URL重写。
在实现之前所示的URL地址时,必须克服的障碍是这些URL在WEB站点中完全不存在。站点中仍然还包含一个脚本,比如说名为product.php,希望通过查询字符串获得参数并根据这些参数生成内容。这个脚本准备处理如下所示的请求:
http://cp.edo2008.com/r.php?mod_v=shangwu&d=&j=1&f=商务类模板
但是如果尝试以下的任何一种请求,网站服务器通常会产生一个“404”错误:
http://cp.edo2008.com/Problem/0411102745.html
URL重写根据定义的一组规则,允许将刚才这样的输入请求中的URL地址,转换为另一个不同的URL地址。通过URL重写,前面这些不存在的URL地址将被转换为一个已经存在的URL地址“r.php?mod_v=shangwu&d=&j=1&f=商务类模板”。
URL重写服务由Apahce的WEB服务器通过mod_rewrite模块提供。PHP不用对它作任何处理,因为PHP引擎只负责“.php”文件的执行。在Apache的世界里,URL重定的事实标准就是mod_rewrite模块,特别是它还能被任何一种基于Apache的虚拟主机服务包所支持。
初看上去,能够很容易地将重写规则添加到一个现有的WEB站点,但是实际上还有其他需要考虑的问题。还需要修改网站内容中的现有链接。
Apahce的mod_rewrite模块,对那些负责构建复杂的动态网站并保证对搜索引擎友好的开发人员而言,是很有价值的工具。它允许在编程时声明一组规则,被Apache实时地将访问者请求的静态URL地址映射为动态查询字符串,并发送给不同的PHP脚本处理。从搜索引擎蜘蛛角度看来,这些URL地址都是静态的。
学习怎样正确使用mod_rewrite包括很多工作,但是最终的结果将是完美而精彩的。它允许访问者和搜索引擎利用一目了然的、对搜索引擎友好的静态URL地址来访问WEB站点。然而在后台,PHP脚本仍将使用查询字符串参数,即典型的参数驱动方式。
在地址http://httpd.apache.org/docs/2.2/rewrtie/处可以找到mod_rewrite相关的官方文件,对它的介绍则在这个地址http://httpd.apache.org/docs/2.2/rewrite/rewrite_intro.html。目前已经存在许多关于mod_rewrite的书。