使用網站網站軟體時,發現有的軟體的根目錄下的index.php可以產生多個不同的網頁,如:
localhost/index.php/blog;localhost/index.php/contact。
請問這種路由方式是如何實現的?謝謝!
黄舟2017-06-26 10:51:00
對於localhost/index.php
,存取的檔案位址是 localhost/index.php
沒錯,然後 /blog
,可以理解成參數,
至於怎麼獲取呢 ?查看 $_SERVER 的資訊吧。
比如說,'/blog' 參數對應的是 Blog 控制器的 index 方法,然後可以透過呼叫 (new Blog())->index() 來實現對應的邏輯。
在往下說,'/blog/add' 參數,對應 Blog 控制器的 add 方法,然後可以透過呼叫 (new Blog())->index() 實現對應的邏輯。
淡淡烟草味2017-06-26 10:51:00
對於伺服器來說,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"拿到以後,就可以根據這個參數做你想做的事,不同的參數,你就可以做不同的事,提供多樣的功能,這也是我對路由的理解。
滿天的星座2017-06-26 10:51:00
後面的參數格式叫做 PATH_INFO, apache預設提示, nginx要自己正規比對一下.
這個就跟index.php?url=/path/to/xxx 一樣. 只是用一個參數來表示項目的路由的.