>  기사  >  백엔드 개발  >  PHP에서 의사정적을 구현하는 여러 가지 방법 요약

PHP에서 의사정적을 구현하는 여러 가지 방법 요약

伊谢尔伦
伊谢尔伦원래의
2017-07-17 16:28:446441검색

PHP pseudo-static은 전달된 매개변수 이름을 숨기는 데 주로 사용됩니다. pseudo-static 구현 솔루션에 대해 말하면 "간단합니다. apache의 다시 쓰기 규칙을 구성하면 됩니다"

라고 대답해 주실 수 있나요? 이런 상황을 눈치채셨나요? 최근에 새로운 기능이 많이 개발되었습니다. 매일 여러 가지 새로운 기능이 추가되었고, 처음 이틀 동안에는 운영 및 유지 관리 학생들이 기꺼이 협력했습니다. 이틀 동안 운영 및 유지 관리 학생들은 기꺼이 협조했습니다. 한 번에 다 해보고 너무 무감각하고 멍청해서 매일 나를 괴롭히는 게 어때? 그런데 막 온라인에 접속하려고 하는데 운영 및 유지보수 동급생에게 열심히 물어야 하고 프로그래머 세계에서 가장 뻔뻔한 말을 해야 합니다. "이것이 마지막 변경입니다." 그리고 나중에 변경해야 합니다. 야, 네 성격은 깔끔한 청소야. . .

이런 고민이 있으신 분들은 다음 글을 꼭 읽어보시고 앞으로 다시는 운영 및 유지보수 문의하지 마시고 원하시는 일 모두 하시길 바라겠습니다. . .

PHP에서 의사정적을 구현하는 방법은 몇 가지가 있나요? 개인적인 의견과 통계는 4가지가 있습니다

1. Apache의 URL 재작성 규칙을 사용하세요. Apache에서 구성합니다. 여기서는 학생들이 모두 간단한 구성만 나열합니다.
RewriteRule ^/test.html index.php?controller=index&action=test [L]


2. PHP의 pathinfo를 사용하여 'www.xxx.com/index.php' /c/index/a를 수행하는 웹사이트를 본 적이 있습니까? /test/id/100', 물론 이를 지원하려면 'php.ini'의

'cgi.fix_pathinfo' 매개변수를 1로 설정해야 합니다. 'www.xxx.com/index.php/c/index/a/test/id/100'을 예로 들어보세요

echo $_SERVER['PATH_INFO'] //출력 '/c/index/a/ test /id/100'
이제 이해하셔야 합니다. 이 단락을 구문 분석하여 실제 주소를 할당할 수 있습니다


3. 일반적으로 의사 정적 페이지는 실제로 존재하지 않는 페이지이므로 다음을 수행할 수 있습니다. Apache 404 구성을 사용하지만 몇 가지 문제가 있습니다. 즉, 'post' 유형 요청이 포기되어 '$_POST'를 얻을 수 없게 됩니다.

하지만 '$_GET'은 여전히 ​​얻을 수 있습니다. 여기서 404 페이지는 '404page.php'이며, Apache 구성은 다음과 같습니다.

ErrorDocument 404 /404page.php

그런 다음 '404page.php'

header("HTTP/1.1 200 OK"); //这里一定要有,不然状态就是404
$reqUrl = $_SERVER['REQUEST_URI']; // 请求地址
/**
* 从URL中解析参数
*/
function parseUrlParams($queryUrl)
{
$arr = explode('?', $queryUrl);
parse_str($arr[1], $param);
if($param)
{
foreach($param as $key => $value)
{
$_GET[$key] = $value;
}
}
}
parseUrlParams($reqUrl); // url解析参数
//然后你就可以使用 $reqUrl 根据自己的规则匹配不同的实际请求地址
if(preg_match('#^/test.html#is', $reqUrl, $matches))
{
include('index.php');
die();
}

4에 다음 코드를 삽입하세요. , 방법 3은 Apache 내부 메커니즘의 리디렉션과 동일하므로 post(get)에 의해 전달된 매개변수를 얻을 수 없게 됩니다. 위의 분석을 보면 실제로 관련 파일을 찾을 수 없다는 것을 알 수 있습니다. 서버가 관련 파일을 찾을 수 없으면 이에 대한 파일을 지정합니다. 이때는 POST 등을 수행할 필요가 없습니다. 손실되지 않습니다. Apache 구성은 다음과 같습니다.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .index.php

위 구성의 일반적인 의미는 파일이나 디렉터리를 찾을 수 없습니다. 대신 루트 디렉터리에서 'index.php'를 사용하면 'index.php'에서 관련 매개변수를 가져와 실제 요청 주소로 구문 분석할 수 있습니다

/**
* 获取当前请求的URI地址
*@param void
*@author painsOnline
*@return string URI
*/
function getReqUri()
{
return trim($_SERVER["REQUEST_URI"]);
}
$reqUri = getReqUri();
if(preg_match('/^\/test.html/isU', $reqUri))
{//解析请求地址
include 'test.php';
exit();
}
<?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;); 
//就是这么简单了。~)  
?>

위 내용은 PHP에서 의사정적을 구현하는 여러 가지 방법 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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