1. php
のルーティング機構とは何ですか?
1. ルーティング メカニズムは、特定の形式の URL 構造からシステムの対応するパラメーターを抽出することです。たとえば、http://main.test.com/article/1 のようになります。 /article/1 -> ?_m=article&id=1。
2. 次に、対応するパラメーターを含む URL を特定の形式の URL 構造に変換します。これは、上記のプロセスの逆のプロセスです。
2. PHP URLルーティング方法
一般: パス情報の取得 - > パス情報の処理
URLルーティング方法:
最初のメソッドは、URL パラメーター (通常はコントローラー クラスとメソッドをそれぞれ表す 2 つのパラメーター) を介してマッピングします。たとえば、index.php?c=index&m=index はインデックス コントローラーのインデックス メソッドにマップされます。
2 番目の方法は URL リライトを使用します。この利点は、php で終わらない他のサフィックスをマッピングできることです。もちろん、最初の方法はリライトによっても実現できますが、リライトを純粋に使用することもより一般的です。一般に、Apache または nginx の
書き換えルールを設定する必要があります
コードをコピーします コードは次のとおりです:
RewriteEngine On
RewriteBase /
書き換えルール ^ Index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
3 番目のメソッドは、 pathinfo、いわゆるパスインフォのようなURLです。 xxx.com/index.php/c/index/aa/cc、Apache がこの URL を処理するとき、index.php の後の部分を環境変数 $_SERVER['PATH_INFO'] に入力します。これは /c/ と等しくなります。インデックス/aa/cc。次に、ルーターはこの文字列を解析することでそれを分析できます。パラメータのどこに次の部分が置かれるかは各フレームワークによって異なります。
3. 単純な PHP ルーティングの実装
3.1 htaccess ファイルを変更します
サーバー Apache または IIS に付属する書き換えファイルを作成し、URL 構造を指定されたファイル (index.php など) にインポートします。
書き換えを有効にする: htaccess ファイルは、Apache サーバー内の構成ファイルであり、関連するディレクトリ内の Web ページの構成を担当します。 .htaccess を有効にするには、apache/conf/httpd.conf を変更し、AllowOverride を有効にし、AllowOverride を使用して特定のコマンドの使用を制限する必要があります。
コードをコピーします コードは次のとおりです:
Options FollowSymLinks
AllowOverride None
に変更されました。
コードをコピー
コードは次のとおりです:
Options FollowSymLinks AllowOverride All
次に、このコードをコピーします。として
RewriteEngine on #rewriteengine リライト エンジン スイッチがオンの場合はオン、オフの場合はオフ
#RewriteCond $1 !^(index.php.php|images|robots.txt)
RewriteRule ([a-zA-Z]{1 ,})-([0-9 ]{1,}).html$ sharexie/test.php?action=$1&id=$2
#([a-zA-Z]{1,})-([0 -9]{1,}) html$ はルール、sharexie/test.php?action=$1&id=$2 は置換される形式、$1 は最初の括弧に一致する値を表し、$2 は 2 番目の括弧を表します。 。
上記のコードは、URL 構造を sharexie/test.php にインポートするものです。これらを .htaccess ファイルとして保存し、Web サイトのルート ディレクトリに配置するだけです。
test.php
コードをコピーします
コードは次のとおりです:
echo 'Your Action is:' $_GET['action']
echo '< ;br/ >';
エコー '$_GET['id']?>
それでは、ブラウザに次のように入力してみましょう:
127.0.0.1/view-12.html
出力は次のとおりです:
あなたのアクションは: view
あなたのIDは: 12
1. RewriteRule の説明:
RewriteRule は正規表現をサポートする書き換えルールです。上記の ([0-9]{1,}) は数字を指し、$ は数字で終わることを示す終了マークです。
2. RewriteRule 設定パラメータ
1) R は外部リダイレクトを強制します
2) F は URL を無効にし、403 HTTP ステータス コードを返します。
3) G は URL を強制的に GONE にし、410 HTTP ステータス コードを返します。
4) P はプロキシ転送の使用を強制します。
5) L は、現在のルールが最後のルールであり、将来のルールの書き換えの分析を停止することを示します。
6) N 最初のルールから書き換えプロセスを再度実行します。
7) C は次のルールに関連付けられます 8) T=MIME-type (force MIME type) MIME タイプを強制します
9) NS は非内部サブリクエストにのみ使用されます
10) NC は大文字と小文字が区別されません
11) QSA が追加されますリクエスト文字列
12) NE はエスケープされた特殊文字を出力しません %3d$1 は =$1 と同等です
例:
1. xianglc をindex.php?c=myuser&m=itime&domain=xianglcに設定します
コードをコピーします コードは次のとおりです:
RewriteRule ^([a-zA-Z0-9]){6 ,20 }/?$index.php?c=myuser&m=itime&domain=$0 [L]
2、#RewriteRule ^/index.html$ /1.php [L]
RewriteRule ^/index-(.*?) -(.*?)-(.*?)-(.*?)-(.*?)-(.*?)-(.*?)-(.*?)-(.*?)$ $9 &a=$1&b=$2&c=$3&d=$4&e=$5&f=$6&g=$7&h=$8 [C,NC]
RewriteRule ^(.*?)-( .*?)-(.*?)- (.*?)-(.*?)-(.*?).html(.*?)$ /1.php?$7&i=$1&j=$2&k= $3&l=$4&m=$5&n=$6 [ QSA、L、NC]
3.2 ルールを解析し、URL を照合し、変換するために使用されるルート パーサー。
まず、すべてのリンクをindex.phpに転送し、index.phpにルートを配布し、クラスとメソッドに従って、対応するクラスファイル内の関数に割り当てます。 $_SERVER['REQUEST_URI'] を使用して URL の www.xx.com/ 以降の部分を取り出し、関連する規則に従ってクラス、メソッド、パラメータ key=>value に分割します。最後に、クラス ファイルをインクルードし、その中の関数を実行します。例は次のとおりです:
コードをコピーします
コードは次のとおりです:
error_reporting(0);
date_default_timezone_set("アジア/上海");
$_DocumentPath = $_SERVER['DOCUMENT_ROOT'];
$_RequestUri = $_SERVER['REQUEST_URI'];
$_UrlPath = $_RequestUri;
$_FilePath = __FILE__;
$_AppPath = str_replace($_DocumentPath, '', $_FilePath); //==>routerindex.php
$_AppPathArr =explode(DIRECTORY_SEPARATOR, $_AppPath);
for ($i = 0; $i $p = $_AppPathArr[$i];
if ($p) {
$_UrlPath = preg_replace('/^/'.$p.'//', '/', $_UrlPath, 1);
}
}
$_UrlPath = preg_replace('/^//', '', $_UrlPath, 1);
$_AppPathArr =explode("/", $_UrlPath);
$_AppPathArr_Count = count($_AppPathArr);
$arr_url = array(
'controller' => 'sharexie/test',
'method' => 'index',
'parms' => array()
);
$arr_url['コントローラー'] = $_AppPathArr[0];
$arr_url['メソッド'] = $_AppPathArr[1];
if ($_AppPathArr_Count > 2 and $_AppPathArr_Count % 2 != 0) {
die('パラメータ错误');
} else {
for ($i = 2; $i < $_AppPathArr_Count; $i += 2) {
$arr_temp_hash = array(strto lower($_AppPathArr[$i])=>$_AppPathArr[$i + 1]);
$arr_url['parms'] = array_merge($arr_url['parms'], $arr_temp_hash);
}
}
$module_name = $arr_url['controller'];
$module_file = $module_name.'.class.php';
$method_name = $arr_url['メソッド'];
if (file_exists($module_file)) {
include $module_file;
$obj_module = new $module_name();
if (!method_exists($obj_module, $method_name)) {
die("要调用的方法存在しない");
} else {
if (is_callable(array($obj_module, $method_name))) {
$obj_module -> $method_name($module_name, $arr_url['parms']);
$obj_module -> printResult();
}
}
} else {
die("定义的模块不存在");
}
?>
http://www.bkjia.com/PHPjc/759966.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/759966.html技術記事 1 つは、php のルーティング メカニズムです。1 つのルーティング メカニズムは、特定の形式の URL 構造内で提示されるシステム パラメータです。 .