目次
#Route" >#Route
Pseudo-static" >Pseudo-static
ホームページ バックエンド開発 PHPチュートリアル PHP ルーティングと擬似静的アプリケーションについて話しましょう

PHP ルーティングと擬似静的アプリケーションについて話しましょう

Jan 03, 2023 pm 03:01 PM
php

この記事では、PHP に関する関連知識を提供します。主にルーティングと擬似静的アプリケーションに関する関連内容を紹介します。ルーティングとは回線の配布を指し、擬似静的とは動的 URL アドレスを静的に見せることです。見てみましょう。皆様のお役に立てれば幸いです。

PHP ルーティングと擬似静的アプリケーションについて話しましょう

文字通り説明すると、道路は線、道路であり、理由、意味、はルールを表しており、どのようなルールまたは意味に従ってどこに割り当てられるかを意味します。

つまり、ルーティングとは回線の分配のことを指しますが、バックエンド Web では一般に、どのような種類の URL アクセスがどのモジュールとどのコントローラを介してマッピングされるかなど、URL にアクセスするためのマッピング ルールを指します。ルーティング ルール: 何らかのメソッド、クラス、クロージャ、またはその他のもの、つまり、配布の役割を果たします。

Pseudo-static は文字通り、偽の、静的なことを意味します。

(補足: 擬似静的とは、動的 URL アドレスを静的アドレスのように見せることです。擬似静的は技術ではなく、最終的な目標です。擬似を実現する方法はたくさんあります。 -static. これは、ホストの URL 書き換えを使用するか、プログラム自体のルーティング設定を使用することで実現できます. たとえば、tp5 や wordpress では URL ルールを自由に設定できます. 前者はホストを管理する権限が必要です,後者はより柔軟です。ただし、入り口を隠すために pathinfo が必要です。または URL 書き換えのサポート)

Web2.0 の世界では、多くのページが動的です (多くの Index.php など)。 /a/... またはindex.php?a=1&... このように、このような動的アドレスはあまり見栄えがよくなく、検索エンジンにとってもフレンドリーではありません。これらの動的 URL アドレスを静的アドレスに偽装するには、何らかの技術的手段が必要です。 URL アドレス。これは擬似静的です。

したがって、擬似静的とは、いくつかのテクノロジーを使用して動的アドレスを静的アドレスに変換し、通常どおりアクセスできるソリューションを指します。特定のテクノロジーを指すものではありません。

それでは、擬似静的を実現するためにどのようなテクノロジーが必要なのかを見てみましょう:

  • Web ホスト書き換えモジュール (URL 書き換え、変換された書き換え)中国語に書き換えるためですが、多くの人はそれを擬似静的とも呼びます)

  • pathinfo (ホスト、index.php/path、およびURL を再利用します。書くことで入り口を隠すことができます)

  • プログラムのルーティング (URL を美しくしたり、短くしたり、より人間的でセマンティックにすることができます)

補足: 言及されていないもう 1 つの非常に重要な点があります、それは [サフィックスの追加] ですが、これは技術とみなされないため、上記の技術リストには記載されていません。サフィックスの追加は上記の各ステップで使用でき、プログラム内で URL を生成するときにサフィックスを制御するだけで実行できます。また、サフィックスは API の設計時に役立つ場合があり、サフィックスは返されるデータ形式を表す必要があります (参考: REST デザイン スタイル)。

分析:

  • #最初のソリューションには、強力であるという利点があります (モジュール ルールの書き換えを使用して、定期的なマッチングなどをサポートします)機能)、任意の URL 書き換えを実現できますが、多くの複雑な URL 書き換えルールを設定する必要があるという欠点があります(Duoduo リベート プログラムは、この方法を使用して擬似静的を作成します。擬似静的がオンになっている場合、プログラムはURL には疑似静的ルールがあり、ホストが必要です。同時に、対応する URL 書き換えルールを手動で構成するには、ホスト管理権限が必要です。ホスト上で構成が変更された場合は、Web サーバーを再起動する必要があります ( .htaccess をサポートする場合は再起動する必要はありません)。

  • これには Web ホストのサポートが必要です。PATHINFO をサポートするホストは、index.php/home/index/index などの URL アクセスをサポートできるため、値を取得できます。 Web 言語 (PHP など) プログラムは

    $_SERVER['PATH_INFO'] = '/home/index/index' を取得できます)。この機能 Using URL rewriting によれば、単純な URL 書き換えルールを使用するだけで、エントリ ファイル以降のすべてのパラメータを書き換えることができるため、エントリ ファイルを非表示にすることができます。もちろん、これはエントリ ファイルを非表示にするだけです。 thinkphp では、ホストが PATHINFO をサポートしていない場合 (nginx の以前のバージョンなど)、互換モード (?s=/m/c/a) を使用して pathinfo をシミュレートして、エントリ ファイルindex.php# を非表示にすることもできます。

  • ##プログラム上のURL書き換えとも言えます(上記の書き換えはホストのURL書き換えです)ホストのURL書き換えを参考にした設計となっておりますので、ルーティング ルールもホスト URL 書き換えルールとほぼ同じです。利点は強力な機能と柔軟なルール構成であり、欠点は解析のパフォーマンスです (これが唯一の欠点であり、他は利点です)。 (WordPress カスタム URL は実際にはカスタム ルートです)
概要:

一般主机都能开启rewrite模块/功能支持URL重写,这很关键,这样实现隐藏入口文件了,这是第一步,再利用pathinfo(或者兼容模式),还有程序的路由,这样配合起来就能够实现简洁明了的URL地址了,也就是实现我们所说的伪静态。

扩展知识

原始的 index.php?m=home&c=index&a=index 实在是太难看了,所以即使不全伪静态,不用路由,也最好抛弃这种原始的地址,因为有些接口开发中已经不支持使用这类url地址了,所以务必使用 pathinfo 的形式:index.php/home/index/index,在隐藏入口,再加个后缀 home/index/index.html 就完美了,如果是做API或者有特殊用途的话还可以带上特定的后缀,比如看云、github仓库克隆时代.git后缀的仓库地址。

其实如果你的入口是index.php,使用兼容模式也可以隐藏入口的,直接?s=/m/c/a,?m=home&c=index&a=index 因为大多主机默认配置的有默认访问文件/入口。

下面分析nginx的部分配置:

主配置:/usr/local/nginx/conf/nginx.conf

user www www;worker_processes auto;error_log /data/wwwlogs/error_nginx.log crit;pid /var/run/nginx.pid;worker_rlimit_nofile 51200;events {
    use epoll;
    worker_connections 51200;
    multi_accept on;
    }

http {
    include mime.types;
    default_type application/octet-stream;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 1024m;
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 120;
    server_tokens off;
    tcp_nodelay on;

    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;

    #Gzip Compression
    gzip on;
    gzip_buffers 16 8k;
    gzip_comp_level 6;
    gzip_http_version 1.1;
    gzip_min_length 256;
    gzip_proxied any;
    gzip_vary on;
    gzip_types
        text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
        text/javascript application/javascript application/x-javascript
        text/x-json application/json application/x-web-app-manifest+json
        text/css text/plain text/x-component
        font/opentype application/x-font-ttf application/vnd.ms-fontobject
        image/x-icon;
    gzip_disable "MSIE [1-6].(?!.*SV1)";

    #If you have a lot of static files to serve through Nginx then caching of the files' metadata (not the actual files' contents) can save some latency.
    open_file_cache max=1000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;######################## default ############################
    server {
    listen 80;
    server_name _;
    access_log /data/wwwlogs/access_nginx.log combined;
    root /data/wwwroot/default;
    index index.html index.htm index.php;
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
        }
    location ~ [^/].php(/|$) {        #fastcgi_pass remote_php_ip:9000;
        fastcgi_pass unix:/dev/shm/php-cgi.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
        }
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
        expires 30d;
        access_log off;
        }
    location ~ .*.(js|css)?$ {
        expires 7d;
        access_log off;
        }
    }########################## vhost #############################
    include vhost/*.conf;}
ログイン後にコピー

每一个虚拟主机在虚拟主机配置目录都有一个对应的配置文件

[root@iZuf6fvttmu9vkdbnencgpZ vhost]# lsdingtalk.uogo8.com.conf  lipin.uogo8.com.conf  tv.uogo8.com.conf
gj.uogo8.com.conf        test.uogo8.com.conf   www.uogo8.com.conf
ログイン後にコピー

虚拟主机配置文件:/usr/local/nginx/conf/vhost/www.uogo8.com.conf

server {
listen 80;
server_name www.uogo8.com uogo8.com;
access_log /data/wwwlogs/www.uogo8.com_nginx.log combined;
index index.html index.htm index.php;
include /usr/local/nginx/conf/rewrite/www.uogo8.com.conf;
root /data/wwwroot/www.uogo8.com;if ($host != www.uogo8.com) {
    rewrite ^/(.*)$ $scheme://www.uogo8.com/$1 permanent;
    }

location ~ .php {    #fastcgi_pass remote_php_ip:9000;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi_params;    set $real_script_name $fastcgi_script_name;        if ($fastcgi_script_name ~ "^(.+?.php)(/.+)$") {        set $real_script_name $1;        #set $path_info $2;
        }
    fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
    fastcgi_param SCRIPT_NAME $real_script_name;    #fastcgi_param PATH_INFO $path_info;
    }
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
    expires 30d;
    access_log off;
    }
location ~ .*.(js|css)?$ {
    expires 7d;
    access_log off;
    }
}
ログイン後にコピー

伪静态单独放一个目录,需要时被虚拟主机配置文件引入,这样方便管理

[root@iZuf6fvttmu9vkdbnencgpZ vhost]# cd ../rewrite/[root@iZuf6fvttmu9vkdbnencgpZ rewrite]# lsnone.conf  thinkphp.conf  www.uogo8.com.conf
ログイン後にコピー

伪静态是一种效果,准确的说这是主机的URL重写规则/配置文件。但一般大家也习惯性称之为伪静态配置、伪静态文件,开启伪静态,伪静态模块,伪静态功能了,其实伪静态只是最终实现的效果。

thinkphp程序的伪静态配置文件:/usr/local/nginx/conf/rewrite/thinkphp.conf

location / {
    if (!-e $request_filename) {        # 不支持pathinfo,那就使用url重写,重写成兼容模式,来达到隐藏入口的效果
        rewrite ^(.*)$ /index.php?s=$1 last;
        break;
    }
}
ログイン後にコピー

thinkphp伪静态配置文件.htaccess(Apache环境)

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f  # 直接利用url重写,重写成 pathinfo 模式
  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
ログイン後にコピー

uogo8的伪静态配置文件:/usr/local/nginx/conf/rewrite/www.uogo8.com.conf

location / {    if (!-e $request_filename) {
        rewrite  ^/(.*)$  /index.php/$1  last;        break;
    }
}
ログイン後にコピー
########################################################################       OneinStack for CentOS/RadHat 5+ Debian 6+ and Ubuntu 12+      ##       For more information please visit https://oneinstack.com      ########################################################################Your domain:                  www.uogo8.com
Virtualhost conf:             /usr/local/nginx/conf/vhost/www.uogo8.com.conf
Directory of:                 /data/wwwroot/www.uogo8.com
Rewrite rule:                 /usr/local/nginx/conf/rewrite/thinkphp.conf
ログイン後にコピー

推荐学习:《PHP视频教程

以上がPHP ルーティングと擬似静的アプリケーションについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles