php rewrite url_PHP网址重定向,URL重写教程

(我现在就想开启和配置:

在conf目录的httpd.conf文件中找到LoadModule rewrite_module modules/mod_rewrite.so将这一行前面的#去掉。2.在要支持url rewirte的目录启用 AllowOverride All,通常是这个主目录下面的AllowOverride,修改这一个就OK

3.在虚拟主机中开启,如下

RewriteEngine On

rewriteOptions Inherit

DocumentRoot /var/www/html/PHPbook/

ServerName phpbook.com

4.在/var/www/html/PHPbook/下某个目录书写你的.htaccess

OK完成)

学习目标

1.了解.htaccess常用指令

2.实现网站统一入口

在实现PHP网址重定向的功能之前,必须确保http.conf中已经加载了mod_rewrite模块;

为了能灵活地控制重定向效果,下面开始了解.htaccess几个常用的指令。

rewriteBase指令的功能:指定一个新目录作为重写规则的根目录。有点抽象,下面我们做一个例子了解它的具体功能。

准备工作:

1. 在根目录(域名为tp.com)下建立.htaccess文件

rewriteEngine On

rewriteBase /article

rewriteRule ^news_sport1\.html$ news.php?id=1

2.在根目录下建立news.php文件,内容如下

3.在根目录下建立文件夹article,然后在article文件夹里建站news.php,内容为

目的:如果我们在浏览器输入域名http://tp.com/news_sport1.html,会输出什么呢?

42014755_1.png

答案是article

下面我们修改.htaccess的内容,在rewriteBase前面加上’#’符号,将它注释掉,看看这一次输出什么内容?

42014755_2.png

这一次输出的是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的内容为

实验效果

42014755_3.jpg

可以看到当我们输入news_sport1.html时,$_GET[‘id’]为1,输入news_sport2.html时,$_GET[‘id’]为2

如果我们将rewriteRule 修改为 ^.*$ news.php会有什么效果呢?

42014755_4.jpg

可以看到无论我们在浏览器地址栏输入域名加地址,不管事实上这个地址存不存在,都会跳转到news.php这个文件。这样就实现了网站统一入口的功能

多参数的接收

学习目标:从静态网址中提取参数

在前一篇文章中我们已经了解了PHP网址重定向的一些基础知识,这一次我们将学习一些更为复杂的URL重写规则。

打开百度新闻,然后查看几篇新闻的网址,可以看到这些新闻的网址都是静态的网址。

如何实现这样的效果呢?下面我们来进行一个简单的小案例

网址http://tp.com/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文件

if(empty($_GET)){

echo "empty";

}else{

foreach($_GET as $key=>$value){

echo $key.':'.$value.'
';

}

}

?>

3.在浏览器网地址中输入http://tp.com/system/2012/10/22/014.html,结果如下

42014755_5.png

下面我们分析这一解析过程

42014755_6.png

综合示例

经过前面两篇文章的学习,我们对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文件

echo '

  • ';

echo '

this is apache1';

echo '

here is php2';

echo '

';

?>

3.在浏览器中输出http://tp.com/catalog.html,结果如下

42014755_7.png

4.建立product.php页面(为了简单,这里我只是显示参数)

if(empty($_GET)){

echo "empty";

}else{

foreach($_GET as $key=>$value){

echo $key.':'.$value.'
';

}

}

?>

5.点击上面两个链接,可以看到效果如下

42014755_8.jpg

实验到这里就已经完成了我们的目标了,但是否还有需要改进的地方呢?

对于商品信息链接,我们是直接采用手写静态链接地址的方式添加上的,但是在实际应用中。这个网址信息通常是从数据库中提取出相应的参数,然后再生成静态网址的。下面我们就看看如何实现这个功能。

结合第3课的代码2分析

2.建立catalog.php文件

echo '

  • ';

echo '

this is apache1';

echo '

here is php2';

echo '

';

?>

实际上我们更希望的代码最好是这样

echo '

  • ';

echo '

this is apache1';

echo '

here is php2';

echo '

';

make_url('apache',1);

function make_url($category,$id){

return 'product/'.$category.'/'.$id.'.html';

}

?>

是不是实现了我们的效果了呢…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值