ホームページ >バックエンド開発 >PHPチュートリアル >PHP URL ルーティング エントリの例_PHP チュートリアル

PHP URL ルーティング エントリの例_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:31:551215ブラウズ

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("定义的模块不存在"); 
}
?>  

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/759966.html技術記事 1 つは、php のルーティング メカニズムです。1 つのルーティング メカニズムは、特定の形式の URL 構造内で提示されるシステム パラメータです。 .
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。