Home >Backend Development >PHP Tutorial >Detailed explanation of the implementation method of pseudo-static php url

Detailed explanation of the implementation method of pseudo-static php url

WBOY
WBOYOriginal
2016-07-25 08:56:051210browse
  1. //Convert url to static url

  2. function url_rewrite($file, $params = array (), $html = "", $rewrite = true) {
  3. if ($rewrite) { //Do not rewrite during the development stage. During development, set $rewrite = false
  4. $url = ($file == 'index') ? '' : '/' . $file;
  5. if (! empty ( $params ) && is_array ( $params )) {
  6. $url .= '/' . implode ( '/', array_slice($params, 0 , 2));
  7. $param = array_slice($params , 2);
  8. foreach($param as $key => $value){
  9. $url .= '/' . $key . '/' . urlencode ( $value );
  10. }
  11. }
  12. if (! empty ( $html )) {
  13. $url .= '.' . $html;
  14. }
  15. } else {
  16. $url = ($file == 'index') ? '/' : '/' . $file;
  17. if (substr ( $url, - 4 ) != '.php' && $file != 'index') {
  18. $url .= '.php';
  19. }
  20. if (! empty ( $params ) && is_array ( $params )) {
  21. $url .= '?' . http_build_query ( $params );
  22. }
  23. }
  24. return $url;
  25. }
  26. echo url_rewrite ( 'test', array ('class' => "User", 'act' => 'check', 'name' => 'tank','page'=>5 ) );echo "
    ";
  27. //$rewrite = In the case of false, the display is as follows/test.php?class=User&act=check&name=tank

  28. echo url_rewrite ( 'test.php', array ('class' => "User", 'act' => 'check', 'name' => 'tank' ) );echo "
    ";

  29. //When $rewrite = true, the display is as follows/test.php/ User/check/tank
  30. echo url_rewrite ( 'test', array ('class' => "User", 'act' => 'check', 'name' => 'tank' ) );echo "
    ";
  31. //When $rewrite = true, the following is displayed/test/User/check/tank

  32. echo url_rewrite ( 'test', array ('class ' => "User", 'act' => 'check', 'name' => 'tank' ), 'html' );echo "
    ";

  33. //$rewrite = If true, the display is as follows /test/User/check/tank.html
  34. ?>

Copy code

"User",'act'=>'check','name '=>'tank'));?>">test

The above converts the dynamic URL into a static URL, and the link will be generated on the page as follows: test If you click directly at this time, a 404 error will definitely be reported, because it is impossible to find the tank directory. You need to specify a php file for the directories and files that cannot be found. This requires the use of apache, nginx, or htaccess, etc.

Three, designate a unified entrance

  1. RewriteCond %{REQUEST_FILENAME} !-f //File not found
  2. RewriteCond %{REQUEST_FILENAME} !-d //Cannot find directory
  3. RewriteRule . /test3/index.php [L]
Copy code

Code description: If the directory is not found, go to the index.php file. If the file is not found, also go to index.php. When accessing http://localhost/test3/test.php/User/check/tank, it will go to index.php. The following content is operated by rewriting http://localhost/test3/test.php/User/check/tank.

Four, index.php file

  1. $filename = $_SERVER['REQUEST_URI']; //Requested url
  2. /**Requested url, "/test3/test.php/User/check/tank"
  3. * test.php is the php file to go to
  4. * User is the class name
  5. * check is the method name in the class
  6. * tank is to be passed to Check parameters
  7. * by bbs.it-home.org
  8. */
  9. preg_match("/(w+.php)/" ,$filename,$match); //Find the php file name
  10. $array = explode('/',$filename); //Split the static url
  11. $key = array_keys($array,$match[0 ]); //Get the subscript Array corresponding to the file ( [0] => 2 )
  12. $file_array = array_slice($array,0,$key[0]+1); //Array ( [0] = > [1] => test3 [2] => test.php )
  13. $param_array = array_slice($array,$key[0]+1); //Array ( [0] => User [1 ] => check [2] => tank )
  14. $file_path = implode('/',$file_array);
  15. if($array[$key[0]] != "index.php"){
  16. include_once($array[$key[0]]); //Include the php file in the request url, here it is test.php
  17. }
  18. if(class_exists($param_array[0])){ //Judge Check if there is a class User in the file test.php
  19. $obj = new $param_array[0];
  20. if(method_exists($obj,$param_array[1])){ //Check if there is a class User There is no check method
  21. $obj->$param_array[1]($param_array[3]); //Call this method, the result is (my name is tank)
  22. }
  23. }
  24. ?>
Copy the code

5, test.php file

  1. class User {
  2. public function check($name){
  3. echo "My name is".$name;
  4. }
  5. }
  6. ?>
Copy code

At this point, when accessing http://localhost/test3/test.php/User/check/tank, no error will be reported.



Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn