男人就应该对自己狠一点... 注册 | 登陆

APACHEISAPI服务器扩展URL REWRITE(URL重写)

Apache  下面介绍2种简单的Apache+PHP下实现URL重写的方法,第一种适合有服务器配置权限的用户,第二种适合租用空间的用户,也作为我近期的学习心得的整理。

1、对于有服务器配置权限的用户,推荐使用Apache的mod_rewrite模块,这里假设已经安装好mod_rewrite模块。打开Apache的配置文件,找到相应主机的部分,添加以下代码:
RewriteEngine On
RewriteRule ^/abc/([a-z]+)/([0-9]+).html$ /abc.php?action=$1&id=$2 [L]然后在shell里执行service httpd reload,让Apache重新载入配置就好了。现在在PHP页面里面我们可以把链接写成abc/a/1.html的形式,Apache在解析这个URL的时候会rewrite成abc.php?action=a&id=1的形式,并返回正确的页面。运用正则表达式我们可以实现几乎任何我们想要的链接形式,mod_rewrite模块的功能异常强大,这里只是一个及其简单的应用。

2、对于租用空间的用户,一般都没有办法修改Apache的配置,这里有个变通的方法,原理是这样的:当要传递参数访问PHP页面时,正常情况下是通过自动全局变量$_GET来获得,比如上面的链接,在页面里可以通过$_GET['action'] 和 $_GET['id']来获得,重写URL后就不行了。现在在每个页面里require一个url_rewrite.php文件,里面代码如下:

PHP代码
  1. $filename = basename($_SERVER['SCRIPT_NAME']);  
  2.   
  3. if (strtolower($filename) == "abc.php") {  
  4.   if (!emptyempty($_GET[id])) {  
  5.     $id = intval($_GET[id]);  
  6.     $action = intval($_GET[action]);  
  7.   }  
  8.   else {  
  9.     $nav = $_SERVER["REQUEST_URI"];  
  10.     $script = $_SERVER["SCRIPT_NAME"];  
  11.     $nav = ereg_replace("^$script""", urldecode($nav));  
  12.     $vars = explode("/"$nav);  
  13.     $action = intval($vars[1]);  
  14.     $id = intval($vars[2]);  
  15.    }  
  16. }  


这样$action和$id也得到了,页面里链接可以写成abc.php/a/1的形式来访问相应页面。
需要注意的是这种方法效率较第一种低,第一种方法是在WEB服务器URL解析过程中实现的,而这里是在PHP页面解析过程里实现的,第2种方法只是变通,不得已而为之,要修改链接形式很不方便也不灵活

Tags: apache

只显示20条记录相关文章

Apache服务器配置技巧 (浏览: 1185, 评论: 0)
Apache与IIS共存共用80端口 (浏览: 1087, 评论: 0)
Red Hat Linux下Apache的编译与安装 (浏览: 1351, 评论: 0)
Apache,Tomcat集群与负载均衡配置 (浏览: 1153, 评论: 0)
Ubuntu上建立WordPress环境 (浏览: 1132, 评论: 0)
AWStats日志分析工具Apachet和IIS(1) (浏览: 1433, 评论: 0)
Apache+tomcat+mysql 负载平衡和集群技术 (浏览: 1033, 评论: 0)
Apache 2.0 新特性概述 Apache HTTP Server 版本2.2 Apache 2.2中文手册 (浏览: 1205, 评论: 0)
apache虚拟主机的设置 (浏览: 1176, 评论: 0)
apache 安全设置 (浏览: 1026, 评论: 0)
Linux下安装Apache2.0.52+PHP5+GD2+MySQL等 (浏览: 1717, 评论: 0)

Trackbacks

点击获得Trackback地址,Encode: UTF-8 老臧's blog

发表评论

评论内容 (必填):