ホームページ >バックエンド開発 >PHPチュートリアル >PHP ルーティングと擬似静的アプリケーションについて話しましょう
この記事では、PHP に関する関連知識を提供します。主にルーティングと擬似静的アプリケーションに関する関連内容を紹介します。ルーティングとは回線の配布を指し、擬似静的とは動的 URL アドレスを静的に見せることです。見てみましょう。皆様のお役に立てれば幸いです。
文字通り説明すると、道路は線、道路であり、理由、意味、はルールを表しており、どのようなルールまたは意味に従ってどこに割り当てられるかを意味します。つまり、ルーティングとは回線の分配のことを指しますが、バックエンド 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 デザイン スタイル)。
分析:
$_SERVER['PATH_INFO'] = '/home/index/index' を取得できます)。この機能
Using URL rewriting によれば、単純な URL 書き換えルールを使用するだけで、エントリ ファイル以降のすべてのパラメータを書き換えることができるため、エントリ ファイルを非表示にすることができます。もちろん、これはエントリ ファイルを非表示にするだけです。 thinkphp では、ホストが PATHINFO をサポートしていない場合 (nginx の以前のバージョンなど)、互換モード (?s=/m/c/a) を使用して pathinfo をシミュレートして、エントリ ファイルindex.php# を非表示にすることもできます。
一般主机都能开启rewrite模块/功能支持URL重写,这很关键,这样实现隐藏入口文件了,这是第一步,再利用pathinfo(或者兼容模式),还有程序的路由,这样配合起来就能够实现简洁明了的URL地址了,也就是实现我们所说的伪静态。 原始的 其实如果你的入口是index.php,使用兼容模式也可以隐藏入口的,直接?s=/m/c/a,?m=home&c=index&a=index 因为大多主机默认配置的有默认访问文件/入口。 下面分析nginx的部分配置: 主配置:/usr/local/nginx/conf/nginx.conf 每一个虚拟主机在虚拟主机配置目录都有一个对应的配置文件 伪静态单独放一个目录,需要时被虚拟主机配置文件引入,这样方便管理 伪静态是一种效果,准确的说这是主机的URL重写规则/配置文件。但一般大家也习惯性称之为伪静态配置、伪静态文件,开启伪静态,伪静态模块,伪静态功能了,其实伪静态只是最终实现的效果。 thinkphp程序的伪静态配置文件:/usr/local/nginx/conf/rewrite/thinkphp.conf thinkphp伪静态配置文件.htaccess(Apache环境) 推荐学习:《PHP视频教程》
扩展知识
index.php?m=home&c=index&a=index
实在是太难看了,所以即使不全伪静态,不用路由,也最好抛弃这种原始的地址,因为有些接口开发中已经不支持使用这类url地址了,所以务必使用 pathinfo
的形式:index.php/home/index/index
,在隐藏入口,再加个后缀 home/index/index.html
就完美了,如果是做API或者有特殊用途的话还可以带上特定的后缀,比如看云、github仓库克隆时代.git
后缀的仓库地址。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
location / {
if (!-e $request_filename) { # 不支持pathinfo,那就使用url重写,重写成兼容模式,来达到隐藏入口的效果
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
<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 中国語 Web サイトの他の関連記事を参照してください。