使用網站網站軟體時,發現有的軟體的根目錄下的index.php可以產生多個不同的網頁,如:
localhost/index.php/blog;localhost/index.php/contact。
請問這種路由方式是如何實現的?謝謝!
對於localhost/index.php,存取的檔案位址是 localhost/index.php 沒錯,然後 /blog,可以理解成參數,
localhost/index.php
/blog
至於怎麼獲取呢 ?查看 $_SERVER 的資訊吧。
比如說,'/blog' 參數對應的是 Blog 控制器的 index 方法,然後可以透過呼叫 (new Blog())->index() 來實現對應的邏輯。
在往下說,'/blog/add' 參數,對應 Blog 控制器的 add 方法,然後可以透過呼叫 (new Blog())->index() 實現對應的邏輯。
對於伺服器來說,www.xxx.com/index.php/test只能辨識到www.xxx.com/index.php,這個是在Nginx或Apche裡面配置的,例如下面一段設定:
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; }
至於後面的信息test,是PHP代碼自己去識別的,其實就是一個參數,(至於PHP代碼怎麼接收到這個參數,你就得去看看Nginx或者Apache是怎麼和PHP交互的了),當這個參數"test"拿到以後,就可以根據這個參數做你想做的事,不同的參數,你就可以做不同的事,提供多樣的功能,這也是我對路由的理解。
後面的參數格式叫做 PATH_INFO, apache預設提示, nginx要自己正規比對一下.
這個就跟index.php?url=/path/to/xxx 一樣. 只是用一個參數來表示項目的路由的.
對於
localhost/index.php
,存取的檔案位址是localhost/index.php
沒錯,然後/blog
,可以理解成參數,至於怎麼獲取呢 ?查看 $_SERVER 的資訊吧。
比如說,'/blog' 參數對應的是 Blog 控制器的 index 方法,然後可以透過呼叫 (new Blog())->index() 來實現對應的邏輯。
在往下說,'/blog/add' 參數,對應 Blog 控制器的 add 方法,然後可以透過呼叫 (new Blog())->index() 實現對應的邏輯。
對於伺服器來說,www.xxx.com/index.php/test只能辨識到www.xxx.com/index.php,這個是在Nginx或Apche裡面配置的,例如下面一段設定:
至於後面的信息test,是PHP代碼自己去識別的,其實就是一個參數,(至於PHP代碼怎麼接收到這個參數,你就得去看看Nginx或者Apache是怎麼和PHP交互的了),當這個參數"test"拿到以後,就可以根據這個參數做你想做的事,不同的參數,你就可以做不同的事,提供多樣的功能,這也是我對路由的理解。
後面的參數格式叫做 PATH_INFO, apache預設提示, nginx要自己正規比對一下.
這個就跟index.php?url=/path/to/xxx 一樣. 只是用一個參數來表示項目的路由的.