如何开启mod_rewrite.so:http://www./html/webkaifa/apache/2010/0228/4006.html (我现在就想开启和配置: 在conf目录的httpd.conf文件中找到 LoadModule rewrite_module modules/mod_rewrite.so 将这一行前面的#去掉。 2.在要支持url rewirte的目录启用 AllowOverride All,通常是<Directory '/var/www/html>这个主目录下面的AllowOverride,修改这一个就OK 3.在虚拟主机中开启,如下 <VirtualHost phpbook.com:80> RewriteEngine On rewriteOptions Inherit DocumentRoot /var/www/html/PHPbook/ ServerName phpbook.com </VirtualHost> 4.在 /var/www/html/PHPbook/下某个目录书写你的.htaccess OK完成) 学习目标 1.了解.htaccess常用指令 2.实现网站统一入口 在实现PHP网址重定向的功能之前,必须确保http.conf中已经加载了mod_rewrite模块; 为了能灵活地控制重定向效果,下面开始了解.htaccess几个常用的指令。 rewriteBase指令的功能:指定一个新目录作为重写规则的根目录。有点抽象,下面我们做一个例子了解它的具体功能。 准备工作:
目的:如果我们在浏览器输入域名http:///news_sport1.html,会输出什么呢? 答案是article 下面我们修改.htaccess的内容,在rewriteBase前面加上’#’符号,将它注释掉,看看这一次输出什么内容? 这一次输出的是root,现在相信你对rewriteBase这一指令的功能已经有了大概的了解了吧。当我们启用rewriteBase命令时,那么符合rewriteRule的网站将被跳转到相应的目录下。 rewriteRule指令的简单学习(知识准备:正则表达式) rewriteRule的格式为:rewriteRule 网址1 网址2 这样符合网址格式1的地址就会被重定向到网址2 下面对rewriteRule进行修改,将rewriteRule ^news_sport1\.html$ news.php?id=1改为 rewriteRule ^news_sport([\d]+)\.html$ news.php?id=$1 修改news.php的内容为
实验效果 可以看到当我们输入news_sport1.html时,$_GET[‘id’]为1,输入news_sport2.html时,$_GET[‘id’]为2 如果我们将rewriteRule 修改为 ^.*$ news.php会有什么效果呢? 可以看到无论我们在浏览器地址栏输入域名加地址,不管事实上这个地址存不存在,都会跳转到news.php这个文件。这样就实现了网站统一入口的功能 多参数的接收学习目标:从静态网址中提取参数 在前一篇文章中我们已经了解了PHP网址重定向的一些基础知识,这一次我们将学习一些更为复杂的URL重写规则。 打开百度新闻,然后查看几篇新闻的网址,可以看到这些新闻的网址都是静态的网址。 如何实现这样的效果呢?下面我们来进行一个简单的小案例 网址http:///system/2012/10/22/014.html,我们假设每一个正斜杠就是一个请求的参数,比如system为请求目录,2012/10/22分别为请求的年/月/日,014为文章的ID,我们将在目标网页中分别提取这些参数 1.创建.htaccess文件并书写rewriteRule规则 rewriteEngine On rewriteRule ^([a-zA-Z]+)/([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)\.html$ /news.php?category=$1&year=$2&month=$3&day=$4&id=$5 2.新建news.php文件
3.在浏览器网地址中输入http:///system/2012/10/22/014.html,结果如下 下面我们分析这一解析过程 综合示例经过前面两篇文章的学习,我们对URL重写已经有了一定的了解,这一篇文章我们将通过一个综合例子来应用重写知识。 效果简述(我想实现以下功能): 1.当我在浏览器中输入catalog.html时,我实际想进入的页面是catalog.php这个分类页面 2.当我点击catalog.html下面某个产品的链接,比如product/apache/1.html时,我实际上是希望跳转到product.php?category=apache?id=1,将apache作为目录参数,1作为商品id号传递给商品信息页 3.我建立了product.php这个商品页面,它会根据传递过来的category和id从数据库中提取出相应的商品信息,并进行显示。 下面将具体实现这些功能 1.建立.htaccess文件 rewriteEngine On rewriteRule ^catalog\.html$ /catalog.php [L] rewriteRule ^product/([a-zA-z0-9]+)/([0-9]+)\.html$ /product.php?category=$1&id=$2 2.建立catalog.php文件
3.在浏览器中输出http:///catalog.html,结果如下 4.建立product.php页面(为了简单,这里我只是显示参数)
5.点击上面两个链接,可以看到效果如下 实验到这里就已经完成了我们的目标了,但是否还有需要改进的地方呢? 对于商品信息链接,我们是直接采用手写静态链接地址的方式添加上的,但是在实际应用中。这个网址信息通常是从数据库中提取出相应的参数,然后再生成静态网址的。下面我们就看看如何实现这个功能。 结合第3课的代码2分析 2.建立catalog.php文件
实际上我们更希望的代码最好是这样
是不是实现了我们的效果了呢… |
|