php教程 php手册 php伪静态的写法,apache伪静态规则

php伪静态的写法,apache伪静态规则

May 25, 2016 pm 04:44 PM

在php中我们要做伪静态可以直接利用php来处理url,但这种伪静态不是标准的可以说看起来像水货一样的,只是找个心里舒服了,当然如果要实现真正的伪静态我们可以使用apache Rewrite伪静态模块来实例,下面大家来看看.

php程序实现伪静态url,伪静态方法一:

<?php
// localhost/php100/test.php?id|1@action|2
$Php2Html_FileUrl = $_SERVER["REQUEST_URI"];
echo $Php2Html_FileUrl . "<br>"; // /php100/test.php?id|1@action|2
$Php2Html_UrlString = str_replace("?", "", str_replace("/", "", strrchr(strrchr($Php2Html_FileUrl, "/") , "?")));
echo $Php2Html_UrlString . "<br>"; // id|1@action|2
$Php2Html_UrlQueryStrList = explode("@", $Php2Html_UrlString);
print_r($Php2Html_UrlQueryStrList); // Array ( [0] => id|1 [1] => action|2 )
echo "<br>";
foreach ($Php2Html_UrlQueryStrList as $Php2Html_UrlQueryStr) {
    $Php2Html_TmpArray = explode("|", $Php2Html_UrlQueryStr);
    print_r($Php2Html_TmpArray); // Array ( [0] => id [1] => 1 ) ; Array ( [0] => action [1] => 2 )
    echo "<br>";
    $_GET[$Php2Html_TmpArray[0]] = $Php2Html_TmpArray[1];
}
//echo &#39;假静态:$_GET变量<br />&#39;;
print_r($_GET); // Array ( [id|1@action|2] => [id] => 1 [action] => 2 )
echo "<br>";
echo "<hr>";
echo $_GET[id] . "<br>"; // 1
echo $_GET[action]; // 2
?>
로그인 후 복사

php程序实现伪静态url,伪静态方法二:

<?php
// localhost/php100/test.php/1/2
$filename = basename($_SERVER[&#39;SCRIPT_NAME&#39;]);
echo $_SERVER[&#39;SCRIPT_NAME&#39;] . "<br>"; // /php100/test.php
echo $filename . "<br>"; // test.php
if (strtolower($filename) == &#39;test.php&#39;) {
    if (!emptyempty($_GET[id])) {
        $id = intval($_GET[id]);
        echo $id . "<br>";
        $action = intval($_GET[action]);
        echo $action . "<br>";
    } else {
        $nav = $_SERVER[&#39;REQUEST_URI&#39;];
        echo "1:" . $nav . "<br>"; // /php100/test.php/1/2
        $script = $_SERVER[&#39;SCRIPT_NAME&#39;];
        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 . &#39;&&#39; . $action;
}
?>
로그인 후 복사

php程序实现伪静态url,伪静态方法三:

<?php
function mod_rewrite() {
    global $_GET;
    $nav = $_SERVER["REQUEST_URI"];
    echo $nav . "<br>";
    $script_name = $_SERVER["SCRIPT_NAME"];
    echo $script_name . "<br>";
    $nav = substr(ereg_replace("^$script_name", "", urldecode($nav)) , 1);
    echo $nav . "<br>";
    $nav = preg_replace("/^.ht(m){1}(l){0,1}$/", "", $nav); //这句是去掉尾部的.html或.htm
    echo $nav . "<br>";
    $vars = explode("/", $nav);
    print_r($vars);
    echo "<br>";
    for ($i = 0; $i < Count($vars); $i+= 2) {
        $_GET["$vars[$i]"] = $vars[$i + 1];
    }
    return $_GET;
}
mod_rewrite();
$year = $_GET["year"]; //结果为&#39;2006&#39;
echo $year . "<br>";
$action = $_GET["action"]; //结果为&#39;_add&#39;
echo $action;
?>
로그인 후 복사

php程序实现伪静态url,伪静态方法四:

<?php
//利用server变量 取得PATH_INFO信息 该例中为 /1,100,8630.html 也就是执行脚本名后面的部分
if (@$path_info = $_SERVER["PATH_INFO"]) {
    //正则匹配一下参数
    if (preg_match("/\/(\d+),(\d+),(\d+)\.html/si", $path_info, $arr_path)) {
        $gid = intval($arr_path[1]); //取得值 1
        $sid = intval($arr_path[2]); //取得值100
        $softid = intval($arr_path[3]); //取得值8630
        
    } else die("Path:Error!");
    //相当于soft.php?gid=1&sid=100&softid=8630
    
} else die(&#39;Path:Nothing!&#39;);
?>
로그인 후 복사

如果你有服务器权限我觉得还是使用apache伪静态.

一、Apache配置:

进入/etc/httpd/conf/目录下,打开httpd.conf文件,启用rewrite:

# LoadModule rewrite_module modules/mod_rewrite.so 去除前面的 #
로그인 후 복사

启用.htaccess

AllowOverride None 修改为:AllowOverride All

二、Rewrite写法:

服务器有配置文件不可能由我们来改,所以大多情况下要在网站的根目录下建一个.htaccess文件,代码如下:

RewriteEngine on //启动rewrite引擎 
RewriteRule ^/index([0-9]*).html$ /index.php?id=$1 //"([0-9]*)" 代表范围 用(.*)代表所有,下同。 
RewriteRule ^/index([0-9]*)/$ /index.php?id=$1 [R] //虚拟目录
로그인 후 복사

三、mod_rewrite 规则修正符

1) R 强制外部重定向

2) F 禁用URL,返回403HTTP状态码。

3) G 强制URL为GONE,返回410HTTP状态码。

4) P 强制使用代理转发。

5) L 表明当前规则是最后一条规则,停止分析以后规则的重写。

6) N 重新从第一条规则开始运行重写过程。

7) C 与下一条规则关联

如果规则匹配则正常处理,以下修正符无效

8) T=MIME-type(force MIME type) 强制MIME类型

9) NS 只用于不是内部子请求

10) NC 不区分大小写

11) QSA 追加请求字符串

12) NE 不在输出转义特殊字符 %3d$1 等价于 =$1


文章网址:

随意转载^^但请附上教程地址。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)