>  기사  >  백엔드 개발  >  PHP pseudo-static 기반 구현 방법 분석

PHP pseudo-static 기반 구현 방법 분석

coldplay.xixi
coldplay.xixi앞으로
2020-08-04 16:05:012527검색

PHP pseudo-static 기반 구현 방법 분석

저는 PHP 개발 작업을 해오면서 개발 과정에서 "의사 정적(pseudo-static)"이라는 말을 오랫동안 들어왔습니다. 그러나 그것은 결코 이해되지 않았습니다.

저는 이 부분을 잘 이해하기 위해 오늘 드디어 결정을 내렸습니다.

우선, 의사 정적이란 무엇입니까?

URL 재작성이라고도 알려진 의사 정적은 정적 URL처럼 보이는 동적 URL입니다. 즉, 동적 웹페이지는 URL 메소드를 다시 작성하여 동적 웹페이지의 매개변수를 제거하지만, 실제 웹페이지 디렉토리에 다시 작성된 페이지를 구현할 필요는 없습니다.

또한 명사 파싱 2개가 추가됩니다

정적 URL: 순수 정적 HTML 문서, filetype:htm을 사용하여 쿼리할 수 있는 웹 페이지:htm

동적 URL: 콘텐츠가 데이터베이스에 저장되며, 그에 따라 콘텐츠가 표시됩니다. 요구 사항에 따라 URL은 ?로 시작됩니다. # & 다음과 같은 다양한 매개변수를 표시합니다: news.php? lang=cn&class=1&id=2

관련 학습 권장 사항: 초보에서 마스터까지의 PHP 프로그래밍

동적, 정적 및 의사 정적 간의 장단점(신규)

동적 URL

우선, Google의 경우 동적 URL에 대한 '크롤링할 수 없음'이라는 문구는 잘못된 것입니다. Google은 동적 URL을 매우 잘 처리하고 원활하게 크롤링할 수 있으며, 두 번째로 '3개 이상의 매개변수를 가질 수 없습니다'라는 문구도 잘못된 것입니다. , Google은 매개변수가 3개 이상인 동적 URL을 크롤링할 수 있습니다. 하지만 URL이 너무 길어지지 않도록 하려면 매개변수를 최대한 줄여야 합니다.

두 번째로, 동적 URL에는 위에서 언급한 대로 몇 가지 장점이 있습니다. 예를 들어, URL의 매개변수는 이 URL의 콘텐츠 언어가 cn이고 카테고리 1에 속하며 콘텐츠 ID가 2임을 Google에 정확하게 알려줍니다. 내용을 처리합니다.

마지막으로, 동적 URL은 최대한 간결해야 하며, 특히 세션 식별자(sid) 및 쿼리(query) 매개변수는 많은 수의 동일한 페이지로 쉽게 이어질 수 있습니다.

정적 URL

무엇보다도 정적 URL의 절대적인 장점은 /product/nokia/n95.html 및 /about.html을 쉽게 이해할 수 있다는 점입니다. 검색결과를 클릭합니다.

두 번째로, 정적 URL은 최고의 URL 형식이 아닐 수 있습니다. 위에서 언급한 것처럼 동적 URL은 인식할 수 있는 일부 매개변수를 Google에 알려줄 수 있습니다. 그러나 정적 URL의 문서 레이아웃이 충분하지 않은 경우(예: 너무 평면적) , HTML 문서(모두 루트 디렉토리에 있음) 및 기타 요소로 인해 정적 URL이 Google에 제공하는 것만큼 참조 정보가 풍부하지 않습니다.

드디어 르시슈는 이 구글 기사에 숨겨진 의미가 있다고 생각하는 걸까요? "이러한 유형의 URL로 페이지를 업데이트하는 것은 시간이 많이 걸릴 수 있습니다. 특히 정보의 양이 빠르게 증가하는 경우에는 각 개별 페이지마다 컴파일 코드를 변경해야 하기 때문입니다." 그런 문제가 있습니까?

의사 정적 URL

우선, 의사 정적 URL은 동적 URL을 "정적"으로 만들 수 없습니다. Google은 의사 정적 URL을 HTML 문서로 간주하지 않습니다. .

둘째, 의사 정적(pseudo-static)을 권장하지만, 중복 매개변수 제거, URL 표준화, 중복 페이지 방지에 중점을 두어야 합니다.

마지막으로 pseudo-static은 잠재적인 위험이 큽니다. 웹사이트 시스템, 웹사이트 구조, 콘텐츠 배포, 매개변수 의미에 익숙할 때 사용하는 것이 가장 좋습니다.

의사 정적 규칙을 작성할 때 중요한 매개변수를 유지해야 하며 이전 예의 news.php와 같은 모든 중요한 매개변수를 간소화해서는 안 되나요? lang=cn&class=1&id=2는 지나치게 간결하고 news-2.html로 다시 작성하는 것보다 news-cn-class1-id2.html로 다시 작성하는 것이 더 좋습니다.

게다가 pseudo-static에는 세션 ID(sid) 및 쿼리(query) 매개변수인 /product.asp?가 포함되어서는 안 됩니다. sid=98971298178906&id=1234와 같은 동적 URL의 경우 해당 URL에 포함된 sid는 원래 Google에서 인식하고 차단합니다. 그러나 /product/98971298178906/1234로 다시 작성하면 Google에서 이를 인식할 수 없을 뿐만 아니라 전체 사이트에서 페이지를 무제한으로 복제합니다(각 세션마다 새 세션 ID가 생성됩니다).

pseudo-static 또는 true static을 선택해야 할까요

1. SEO에 true static과 false static을 사용하는 것에는 차이가 없습니다

  2. true static을 사용하면 하드 디스크가 손상되고 포럼 성능에 영향을 미칠 수 있습니다

3. pseudo 사용 -static 정적은 일정량의 CPU 점유를 차지하며 과도하게 사용하면 CPU 과부하가 발생합니다

 4. 가장 중요한 점은 SEO를 위해 정적을 원한다는 것입니다

 그래서:

 1. 진정한 정적 방법을 사용하면 직접적으로 제거 방법에 관계없이 하드 디스크에 매우 해로울 수 있습니다.

  2. 참과 거짓 정적의 효과가 동일하므로 의사 정적을 선택할 수 있습니다.

  3. 그러나 pseudo-static을 과도하게 사용하면 CPU 과부하가 발생합니다.

 4. 그러니 대량으로 사용하지 않는 한 괜찮습니다.

 5. static은 SEO 전용이므로 SEO에는 pseudo-static만 필요하고 사용자가 사용할 필요가 없습니다.

  6. 따라서 SEO 크롤링을 위해 특별히 제공되는 Archiver에서 pseudo-static만 사용하면 됩니다.

 7. 제 글을 인내심 있게 읽어주신 모든 분들께 감사드립니다.

 8. 질문이 있거나 다른 의견이 있으면 의사 정적과 실제 정적에 대해 자유롭게 의견을 남겨주세요. 실제 정적과 의사 정적에는 근본적인 차이가 있습니다. 사용자 검색을 위한 순수 HTML 처리와 여러 데이터를 호출하는 PHP는 이전보다 CPU 사용량이 훨씬 적습니다. 누군가가 HTML 다운로드를 자주 읽고 하드 디스크에 쓴다고 말한 것을 기억합니다. 그는 마치 데이터베이스를 읽는 데 디스크에 읽고 쓸 필요가 없는 것처럼 말했습니다. 게다가 캐시된 분산된 PHP 파일이 많이 있습니다. 이러한 읽기에는 디스크 작업이 필요하지 않습니까? 말도 안 되는.

 단일 HTML + 이미지 플래시 및 기타 첨부 파일을 읽어서 목적을 달성할 수 있습니다. 왜 굳이 데이터베이스를 읽고, PHP 캐시 파일을 읽고, 데이터 출력을 다시 통합하고, 이미지 플래시 및 기타 첨부 파일을 추가해야 할까요? CMS 홈 페이지는 많은 상호 작용이 필요하지 않으며 여기에서는 포럼 버전을 사용해서는 안 됩니다. 반대로 더 고려해야 할 점은 바로 아름다움입니다. 호환 가능! 직관적인 정보! 성능! 그리고 안정성!

PHP에서 의사 정적을 구현하기 위해 네 가지 방법을 전송 중입니다:

 <?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
 //伪静态方法二
 
 // 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(!empty($_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
 //伪静态方法三 
 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
 //伪静态方法四
 
 //利用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를 사용하여 의사 정적을 구현하지 않으려면 apache, nginx 및 같은 서버와 함께 제공되는

함수를 사용할 수 있습니다. 그걸 설정하는 거예요.

위 내용은 PHP pseudo-static 기반 구현 방법 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제