タイトル: 「水坑」伪静态相关知识的深入讲解
日付: 2021 年 12 月 08 日 22:56:36
タグ:
- GesF-Force
- Rewrite
- PHP
カテゴリー: - コンピューターネットワーク
ID: 837
エイリアス: 20190704012
URL は理論上、ファイルを指し示すものであり、ディレクトリの場合でもデフォルトの設定で index.html または index.php を探し、存在しない場合はウェブ環境から 404 を返します。
ただし、Z-BlogPHP のような動的サイトの場合、URL は常に index.php を指し示し、内部ロジックによって 404 を返すかどうかが決まります。
URL が index.php を指し示すようにする実装は「URL Rewrite」と呼ばれ、一般的には「伪静态」と対応するとされますが、厳密には「伪静态」(Pseudo-static)は「URL Rewrite」の一つの応用です。
Redirect は「リダイレクト(301)」を意味し、301 フラグを持つ Rewrite と理解することもできます。
なぜ「水坑」と呼ばれるのかは次を参照してください:
コードと解説のコメントは以下の Git リンクで確認できます。
各リンクは「Git コミット」の状態に対応しており、つまり「バージョン管理」です。順番にコピーして Web 環境でテストすることができます。例えば、URL_Rewrite/index.php
です。
大まかに理解したら、次の「バージョン」に切り替えて同じファイルに上書きして結果を確認してください。
純粋な動的モード - php-rewrite/index.php・70063e1・沉冰浮水 / 水水の旧代码合集 - Gitee.com
php-rewrite・沉冰浮水 / 水水の旧代码合集 - 码云 - 开源中国:
https://gitee.com/wdssmq/StaleCode/tree/c04e9f96f4654f484510b93d7453ebf0f6c8b53f/php-rewrite
↑ ここでスクリーンショットの効果を確認できます(純粋な動的モード)
/?id=1024
と/post/2048.html
の 2 つのアクセスが「存在しない」と返される方法が異なることに気付くでしょう。後者の 404 は「ウェブプログラム」によって返されます。
「- 現在は 00:41:31 ですので、明日続けます。 -」
「- いくつかの文を追加し、00:46:31 まで遅れました。 -」
したがって、前のステップのコードでは$options["is_rewrite"]
が伪静态のスイッチとして定義されています。
これをtrue
に変更していくつかのコードを追加します。
対象の伪静态 - php-rewrite/index.php・6464486・沉冰浮水 / 水水の旧代码合集 - Gitee.com:
上記の URL は、このバージョン内のindex.php
ファイルの完全なコードであり、右側のリンクを使用してこのコミットの「ファイルの変更」情報を確認できます対象の伪静态 - php-rewrite/index.php・6464486・ファイルの変更を表示
以下は追加された PHP コードであり、本質的な概念は、「ウェブサイトプログラム」内で「伪静态オプション」を開き、オプションに基づいて「ウェブページのコンテンツ(主にリンク)を変更する」ことです。
// 伪静态开关切换
$options["is_rewrite"] = true;
// 文章 url 改为静态形式
if ($options["is_rewrite"]) {
$post["url"] = $options["host"] . "post/3.html";
}
↑「ファイルの変更」リンクを使用することをお勧めします。index.php
の内容が変更されたことに加え、.htaccess
ファイルが追加されていることに気付くでしょう。
必要な伪静态効果を完全に実現するには、.htaccess
を正しく設定する必要があります。
注:.htaccess
は Apache の設定ファイルであり、IIS や Nginx にもそれぞれのルール構文があります。
まとめ:
PHP コードとファイルは「ウェブサイトプログラム」に属します。
IIS/Nginx/Apache は「ウェブプログラム」と呼ばれ、PHP や他の言語の解析エンジンと組み合わせて、MySQL や他のデータベースと共に「ウェブ環境」を構成します。
「URL Rewrite」は「ウェブプログラム」が提供する機能です。
通常、Z-BlogPHP やそれに類似したプログラムでは、次のように「伪静态」を有効にする必要があります:
- プログラム自体がサポートしていること
- 適切なオプションスイッチを有効にすること
- 「ウェブプログラム」に対応するルールファイルを正しく設定すること
他に知っておく必要があること:
- 伪静态を有効にすると、
/?id=3
と/post/3.html
の両方が開くことができ、アクセスする内容は同じです。これはバグではなく、(この記事の例では)前者を後者に「リダイレクト(301)」することはできません。 - 伪静态を有効にすると、
?id=1024
とpost/2048.html
の両方が PHP によって「存在しない」情報が返されます。 - PHP が 404 を出力する場合、ステータスコードも設定する必要があります:
if ($status == "404") { header("HTTP/1.1 404 Not Found"); header("status: 404 Not Found"); }
- 「リダイレクト(301)」機能 -「ウェブサイトプログラム」と「ウェブプログラム」の両方で実現できますが、規則的な場合は「ウェブプログラム」で実現することを強くお勧めします。
- 301 と 302 の両方が「リダイレクト」と見なされることに注意してください。違いは永続的と一時的です。
- 302 は一般的に「ウェブサイトプログラム」自体で使用されます。
- この記事では「記事」の伪静态ルールのみを設定しましたが、実際のプログラムでは「タグ」「カテゴリー」「日付」などがあります。それぞれの Rewrite ルールを書くのは少し手間がかかります。
- そのため、存在しないファイルへのアクセスリクエストはすべて PHP で処理することが一つの選択肢です。
- 「php-rewrite/.htaccess・沉冰浮水 / 水水の旧代码合集 - 码云 - 开源中国」を参照してください。←
12〜14
行のコメントアウトされた部分で、これは Z-BlogPHP のデフォルトのルール形式です。
「- だいたいこんな感じです。書き終わると昼になってしまいました。 -」