php实现伪静态方法详解
一、普通伪静态功能
实现路径方式:localhost/test.php/30/505.html
特点:路径中会有test.php字符 这样路径可能造成搜索引擎不友好。
不过也是伪静态的一种,它不需要编写伪静态规则。
<?php
//伪静态方法二
// localhost/test.php/30/505.html
$filename = basename($_SERVER['SCRIPT_NAME']);
echo $_SERVER['SCRIPT_NAME']."<br>";// /php100/test.php
echo $filename."<br>";// test.php
if(strtolower($filename)=='test.php'){
if(!empty($_GET[id])){
$id=intval($_GET[id]);
echo $id."<br>";
$action=intval($_GET[action]);
echo $action."<br>";
}else{
$nav=$_SERVER['REQUEST_URI'];
echo "1:".$nav."<br>";// /php100/test.php/1/2
$script=$_SERVER['SCRIPT_NAME'];
echo "2:".$script."<br>";// /php100/test.php
$nav=ereg_replace("^$script","",urldecode($nav));
echo $nav."<br>"; // /1/2
$vars=explode("/",$nav);
print_r($vars);// Array ( [0] => [1] => 1 [2] => 2 )
echo "<br>";
$id=intval($vars[1]);
$action=intval($vars[2]);
}
echo $id.'&'.$action;
}
?>
二、apache实现伪静态
需要服务器支持。
我们新建一个.htaccess文件之后,就在里面写入以下内容:
RewriteEngine on #rewriteengine为重写引擎开关on为开启off为关闭
RewriteRule ([0-9]{1,})$index.php?id=$1
我讲解一下RewriteRule:RewriteRule是重写规则,支持正则表达式的,上面的([0-9]{1,})是指由数
字组成的,$是结束标志,说明是以数字结束!
好吧,现在我们可以实现伪静态页面了,写下一下的规则:
RewriteEngine on
RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$index.php?action=$1&id=$2
([a-zA-Z]{1,})-([0-9]{1,}).html$是规则,index.php?action=$1&id=$2是要替换的格式,$1代表第
一个括号匹配的值,$2代表第二个,如此类推!!
我们写一个处理的PHP脚本:
index.php
PHP代码
<?php
echo ‘你的Action是:’ . $_GET['action'];
echo ‘
’;
echo ‘你的ID是:’ . $_GET['id'];
?>
三、nginx实现伪静态
需要服务器支持。
nginx伪静态规则与apache的实现方法相似。
通过规则 我们的普通路径 如下 article.php?time=2012-0509&id=6
要实现的路径 如下 article-2012_0509-6.html
那么要实现如上效果,我们可以使用如下 静态规则
rewrite "^/article/(.*)/(.*)\.html$" /article.php?time=$1&id=$2 last;
========================================================================
链接效果1:
old.php?time=2012-0509
要实现的路径 如下 article-2012_0509.html
规则:
rewrite "^/old-(.*)\.html$" /old.php?time=$1 last;
========================================================================
链接效果2:
new.php
要实现的路径 如下 new.html
规则:
rewrite "^/news\.html" /news.php last;
========================================================================
针对链接效果1我们写一个处理的PHP脚本来接收参数:
index.php
PHP代码
<?php
echo '你的time是:' . $_GET['time'];
?>
实例参考下载:http://knowledge.jmxzw.com/archives/144.shtml