沉冰浮水

沉冰浮水

做最终到的事,成为最终成为的人!
github
bilibili
mastodon
zhihu
douban

「水坑」について、擬似静的に関連する知識を詳しく説明します。

タイトル: 「水坑」伪静态相关知识的深入讲解
日付: 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

https://gitee.com/wdssmq/StaleCode/blob/70063e12f67c31ba5588a2b2a0a0e3fe727ea37b/php-rewrite/index.php


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:

https://gitee.com/wdssmq/StaleCode/blob/6464486539fdb4f53a9b834d2a2d444587f14fe8/php-rewrite/index.php


上記の 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=1024post/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 ルールを書くのは少し手間がかかります。

「- だいたいこんな感じです。書き終わると昼になってしまいました。 -」

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。