2种简单的Apache+PHP下实现URL重写的方法

2种简单的Apache+PHP下实现URL重写的方法
介绍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

然后在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文件,里面代码如下:

$filename = basename($_SERVER['SCRIPT_NAME']);

if (strtolower($filename) == “abc.php”){

if (!empty($_GET[id])){

 $id = intval($_GET[id]);

$action = intval($_GET[action]); }

else { $nav = $_SERVER["REQUEST_URI"];

$script = $_SERVER["SCRIPT_NAME"];

$nav = ereg_replace(”^$script”, “”, urldecode($nav));

$vars = explode(”/”, $nav);

$action = intval($vars[1]);

$id = intval($vars[2]); } }

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

注意: .htaccess文件放在站点根目录下,权限级别最高.然后把伪静态规则放在.htaccess中,传到网站根目录.问题解决.

相关主题
相关文档
最新文档