ホームページ  >  記事  >  バックエンド開発  >  PHP で擬似静的を実装するいくつかの方法のまとめ

PHP で擬似静的を実装するいくつかの方法のまとめ

伊谢尔伦
伊谢尔伦オリジナル
2017-07-17 16:28:446390ブラウズ

PHP の疑似静的は主に、渡されたパラメータ名を隠すために使用されます 疑似静的な実装ソリューションについて言えば、「単純です。Apache の書き換えルールを設定するだけです」と喜んで答えられますか

でも、どうでしょうか。この状況に気づきましたか? 最近、多くの新しい機能が追加されており、最初の 2 日間は、運用と保守の学生が積極的に協力してくれました。 2日間、運営と保守の学生は喜んで協力してくれました。どうして一度に全部やって、頭が鈍くてバカなので毎日迷惑をかけないのですか?しかし、これからオンラインに移行しようとしており、運用保守のクラスメートに熱心に質問し、プログラマの世界で最も恥知らずな言葉を言わなければなりません。「これが最後の変更です」と後で変更しなければなりません。ねえ、あなたの性格、それはきれいな一掃です。 。 。

このようなお悩みをお持ちの方は、今後二度と運用保守を依頼することがなくなり、安心してご利用いただけるよう、以下の記事を必ずお読みください。 。 。

PHP で擬似静的を実装する方法は何通りありますか?個人的な意見と統計では、4 つの方法があります

1. Apache の URL 書き換えルールを使用します。ここでは、学生が作成した簡単な設定のみを示します

。 /test.htmlindex.php?controller=index&action=test [L]

2. PHP の pathinfo を使用して、これを実行している Web サイトをいくつか見たことがありますか? 'www.xxx.com/index.php' /c/index/a/ test/id/100'、もちろんこれをサポートするには、'php.ini' のパラメーター


'cgi.fix_pathinfo' を 1 に設定する必要があります。 'www.xxx.com/index.php/c/index/a/test/id/100' を例に挙げます


echo $_SERVER['PATH_INFO'] //出力 '/c/index/a/ test /id/100'

これで、この段落を解析して実際のアドレスを割り当てることができることを理解したはずです

3. 通常、疑似静的ページは実際には存在しないページであるため、次のことが可能です。 Apache 404 設定を使用しますが、いくつかの問題があります。つまり、'post' タイプのリクエストが破棄され、'$_POST' を取得できなくなります


が、次のように仮定すると、'$_GET' は引き続き取得できます。ここでの 404 ページは '404page.php' です。Apache の設定は次のとおりです:


ErrorDocument 404 /404page.php

次に、次のコードを '404page.php' に埋め込みます

header("HTTP/1.1 200 OK"); //这里一定要有,不然状态就是404
$reqUrl = $_SERVER['REQUEST_URI']; // 请求地址
/**
* 从URL中解析参数
*/
function parseUrlParams($queryUrl)
{
$arr = explode('?', $queryUrl);
parse_str($arr[1], $param);
if($param)
{
foreach($param as $key => $value)
{
$_GET[$key] = $value;
}
}
}
parseUrlParams($reqUrl); // url解析参数
//然后你就可以使用 $reqUrl 根据自己的规则匹配不同的实际请求地址
if(preg_match('#^/test.html#is', $reqUrl, $matches))
{
include('index.php');
die();
}

4 メソッドの改良版。 3、メソッド 3 は、Apache の内部メカニズムのリダイレクトに相当し、post(get) によって渡されるパラメータを取得できなくなります。実際に上記を解析してみると、該当するファイルが見つからない場合は、ファイルを指定してOKであれば、この時点でPOSTなどを行う必要はありません。失われることはありません。 Apache の設定は次のとおりです:


RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule がリクエストされたときの意味です。ファイルまたはディレクトリが見つかりません。代わりにルート ディレクトリで「index.php」を使用すると、「index.php」内の関連パラメータを取得して、実際のリクエスト アドレスに解析できます

/**
* 获取当前请求的URI地址
*@param void
*@author painsOnline
*@return string URI
*/
function getReqUri()
{
return trim($_SERVER["REQUEST_URI"]);
}
$reqUri = getReqUri();
if(preg_match('/^\/test.html/isU', $reqUri))
{//解析请求地址
include 'test.php';
exit();
}
<?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 で擬似静的を実装するいくつかの方法のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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