在 php 中我们要做伪静态可以直接利用 php 来处理 url, 但这种伪静态不是标准的可以说看起来像水货一样的, 只是找个心里舒服了, 当然如果要实现真正的伪静态我们可以使用 apache Rewrite 伪静态模块来实例, 下面大家来看看.
php 程序实现伪静态 url, 伪静态方法一:
- <?php
- // localhost/php100/test.php?id|1@action|2
- $Php2html_FileUrl = $_SERVER["REQUEST_URI"];
- echo $Php2Html_FileUrl . ""; /$php100/test.php?id|1@action|2
- $Php2Html_UrlString = str_replace("?", "", str_replace("/","", strrchr(strrchr($Php2Html_FileUrl, "/") , "?")));
- echo $Php2Html_UrlString . "
- "; // id|1@action|2
- $Php2Html_UrlQueryStrList = explode("@", $Php2Html_UrlString);
- print_r($Php2Html_UrlQueryStrList); // Array ( [0] => id|1 [1] => action|2 )
- echo "
- ";
- 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 "
- ";
- $_GET[$Php2Html_TmpArray[0]] = $Php2Html_TmpArray[1];
- }
- //echo '假静态:$_GET 变量';
- print_r($_GET); // Array ( [id|1@action|2] => [id] => 1 [action] => 2 )
- echo "
- ";
- echo "
- ";
- echo $_GET[id] . "
- "; // 1
- echo $_GET[action]; // 2
- ?>
php 程序实现伪静态 url, 伪静态方法二:
- <?php
- // localhost/php100/test.php/1/2
- $filename = basename($_SERVER['SCRIPT_NAME']);
- echo $_SERVER['SCRIPT_NAME'] . ""; /$php100/test.php
- echo $filename . "
- "; // test.php
- if (strtolower($filename) == 'test.php') {
- if (!emptyempty($_GET[id])) {
- $id = intval($_GET[id]);
- echo $id . "
- ";
- $action = intval($_GET[action]);
- echo $action . "
- ";
- } else {
- $nav = $_SERVER['REQUEST_URI'];
- echo "1:" . $nav . "
- "; /$php100/test.php/1/2
- $script = $_SERVER['SCRIPT_NAME'];
- echo "2:" . $script . "
- "; /$php100/test.php
- $nav = ereg_replace("^$script", "", urldecode($nav));
- echo $nav . "
- "; /$1/2
- $vars = explode("/", $nav);
- print_r($vars); // Array ( [0] => [1] => 1 [2] => 2 )
- echo "
- ";
- $id = intval($vars[1]);
- $action = intval($vars[2]);
- }
- echo $id . '&' . $action;
- }
- ?>
php 程序实现伪静态 url, 伪静态方法三:
- <?php
- function mod_rewrite() {
- global $_GET;
- $nav = $_SERVER["REQUEST_URI"];
- echo $nav . "";
- $script_name = $_SERVER["SCRIPT_NAME"];
- echo $script_name . "
- ";
- $nav = substr(ereg_replace("^$script_name", "", urldecode($nav)) , 1);
- echo $nav . "
- ";
- $nav = preg_replace("/^.ht(m){1}(l){0,1}$/", "", $nav); // 这句是去掉尾部的. html 或. htm
- echo $nav . "
- ";
- $vars = explode("/", $nav);
- print_r($vars);
- echo "
- ";
- for ($i = 0; $i <Count($vars); $i+= 2) {
- $_GET["$vars[$i]"] = $vars[$i + 1];
- }
- return $_GET;
- }
- mod_rewrite();
- $year = $_GET["year"]; // 结果为'2006'
- echo $year . "
- ";
- $action = $_GET["action"]; // 结果为'_add'
- 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('Path:Nothing!');
- ?-->
如果你有服务器权限我觉得还是使用 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 不在输出转义特殊字符 =$1 等价于 =$1
来源: https://www.php1.cn/detail/php-6ec2358cdb.html