ホームページ >バックエンド開発 >PHPチュートリアル >PHP で擬似静的を実現する方法は 4 つありますが、ご存知ですか?
疑似静的実装ソリューションと言えば、「簡単、Apache の書き換えルールを設定するだけです」とすぐに答えますか? 最近、このような状況に気づいたことがありますか? 、毎日いくつかの新機能がリリースされ、毎日多くの疑似静的構成が行われます。運用および保守の学生が積極的に協力するのは最初の 2 日間だけですが、2 日後には、運用および保守の学生が協力するようになります。叱られる。どうして一度に全部やって、頭が鈍くてバカなので毎日迷惑をかけないのですか?しかし、これからオンラインに移行しようとしているので、運用保守のクラスメートに熱心に質問し、プログラマーの世界で最も恥知らずな言葉を言わなければなりません。「
これが最後の変更です」。またまた、おい、君 彼の個性は完全に払拭されている。 。 。
このようなお悩みをお持ちの場合は、今後二度と運用保守を依頼することがないよう、ご自身のやりたいようにできるよう、以下の記事をお読みください。 。 。
それでは、PHP で擬似静的を実装する方法は何通りあるでしょうか?個人的な意見と統計:
4 つの方法があります1. Apache の URL 書き換えルールを使用します。ここでは、学生全員が作成した簡単な設定のみを示します。
2. PHP の pathinfo を使用します。これをサポートするために、いくつかの Web サイトが「www.xxx.com/index.php/c/index/a/test/id/100」のように動作するのを見たことがあるでしょう。 「php.ini」のパラメータ
RewriteEngine OnRewriteRule ^/test.html index.php?controller=index&action=test [L]
これで、この段落を解析して実際のアドレスを割り当てることができることを理解できるはずです。
3. 404 メカニズムを使用すると、通常、疑似静的ページは実際には存在しないページであるため、Apache 404 構成を使用できますが、いくつかの問題があります。つまり、「post」タイプのリクエストが放棄され、 「$_POST」を取得できなくなります
しかし、「$_GET」はまだ取得できます。ここでの 404 ページが「404page.php」であると仮定すると、Apache の設定は次のとおりです:
echo $_SERVER['PATH_INFO']; //输出'/c/index/a/test/id/100'
その後、埋め込みます'404page.php' 内の次のコード
ErrorDocument 404 /404page.php
4. メソッド 3 の改良版。メソッド 3 は、Apache の内部メカニズムにおけるリダイレクトと同等であり、post(get) によって渡されるパラメータを取得できなくなります。 。実際に上記を解析してみると、該当するファイルが見つからない場合は、ファイルを指定してOKであれば、この時点でPOSTなどを行う必要はありません。失われることはありません。 Apache の設定は次のとおりです。
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();}
上記の設定の一般的な意味は、要求されたファイルまたはディレクトリが見つからない場合、代わりにルート ディレクトリで 'index.php' を使用し、その場合は 'index.php' を使用できるということです。 php' in 関連するパラメータを取得し、実際のリクエストアドレスに解析します
RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . index.php
私には才能と知識がほとんどありませんが、不足しているものがあれば、遠慮なく補ってください