ホームページ  >  記事  >  バックエンド開発  >  php URLの擬似静的処理の詳細説明

php URLの擬似静的処理の詳細説明

WBOY
WBOYオリジナル
2016-07-25 08:59:411203ブラウズ
  1. // URLを静的URLに変換する
  2. function url_rewrite($file,$params = array (),$html = "",$rewrite = true)
  3. {
  4. if ($rewrite ) { //開発段階では書き換えを行わないでください。
  5. $url = ($file == 'index') '' : '/'
  6. if (!emptyempty; params) && is_array($params)) $url .= '/' . implode('/', $params);
  7. if (!emptyempty ($html)) $url .= '.' } else {
  8. $url = ($file == 'index') ? '/' : '/' . $file; if (substr($url, -4) != '.php' && $file != 'インデックス') $url .= '.php';
  9. if (!emptyempty ($params) && is_array($params)) $url .= '?' }
  10. return $url ;
  11. }
  12. echo url_rewrite('test.php',array('class'=>"User",'act'=>'check','name'=>'tank'));
  13. / いつ/$rewrite = false、表示は次のようになります /test.php?class=User&act=check&name=tank
  14. echo url_rewrite('test.php', array('class'=>"User",'act'= >'check','name'=>'tank'));
  15. //$rewrite = true の場合、表示は次のようになります/test.php/User/check/tank
  16. echo url_rewrite('test' , array ('class'=>"User",'act'=>'check','name'=>'tank'));
  17. // $rewrite = true の場合、表示は次のようになります / test/ ユーザー/チェック/タンク
  18. echo url_rewrite('test', array ('class'=>"User",'act'=>'check','name'=>'tank'),' html' );
  19. // $rewrite = true の場合、次のように表示されます /test/User/check/tank.html
  20. ?>
  21. 'check','name'=>'tank'));?>">test
  22. コードをコピーします
上記は、動的 URL を静的 URL に変換するメソッドを記述するだけで、次のようにページにリンクが生成されます。

test
  1. コードをコピー
ここを直接クリックすると、ルートがタンク ディレクトリを見つけることができないため、404 エラーが報告されます。ここが難しいので、見つからないディレクトリやファイルには php ファイルを指定する必要があります。これには、Apache、nginx、htaccess などを使用する必要があります。
三、統一された入口を指定する

RewriteCond %{REQUEST_FILENAME} !-f //ファイルが見つかりません
    RewriteCond %{REQUEST_FILENAME} !-d //ディレクトリが見つかりません
  1. RewriteRule . /test3/index.php [L]
  2. コードをコピーします

.htaccess で実装しても、Apache などの設定ファイルに記述しても、すべて可能です。上記の 3 つの文は、ディレクトリが見つからない場合は、index.php ファイルに移動します。ファイルが見つからない場合は、index.php に移動します。 これを実行した後、http://localhost/test3/test.php/User/check/tank にアクセスすると、index.php に転送されます。php ファイルがわかったので、扱いは簡単になります。 以下の内容は全て http://localhost/test3/test.php/User/check/tank を書き換えて動作させており、他の方法も同様です。

4、index.phpファイル

  1. $filename = $_SERVER['REQUEST_URI']; //リクエストされたURL
  2. /**リクエストされた URL、「/test3/test.php/User/check/tank」
  3. * test.php は移動先の php ファイルです
  4. * User はクラス名です
  5. * check はクラス内のメソッド名です
  6. * Tank はパラメータをチェックするために渡されます*/
  7. preg_match("/(w+.php)/" , $filename,$match); //php ファイル名を検索します
  8. $array =explode('/',$filename); //静的 URL を分割します
  9. $key = array_keys($array,$match[0 ] ); //ファイルに対応する添字配列を取得します ( [0] => 2 )
  10. $file_array = array_slice($array,0,$key[0]+1); //Array ( [0] = >) ; [1] => test3 [2] => test.php )
  11. $param_array = array_slice($array,$key[0]+1); => チェック [2] => タンク )
  12. $file_path = implode('/',$file_array); = "index.php"); include_once($array[$key[0]]); //リクエスト URL に php ファイルを含めます。ここでは test.php です
  13. }
  14. if(class_exists($param_array[0])){ //判定チェックファイル内にクラス User がある場合 test.php
  15. $obj = new $param_array[0];
  16. if(method_exists($obj,$param_array[1])){ //クラス User があるかどうかを確認しますチェックメソッドはありません
  17. $obj->$param_array[1]($param_array[2]); //このメソッドを呼び出すと、結果は (私の名前は Tank) になります
  18. }
  19. }
  20. ?>
  21. Copyコード
5、test.php ファイル

class User {
    public function check($name){
  1. echo "My name is".$name
  2. }
  3. }
  4. ?>
  5. コードをコピー
それでは、http://localhost/test3/test.php/User/check/tank にアクセスしてみましょう。 結果は次のようになります。私の名前はタンクで、アドレス バーは静的なままです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。